MATERIALS I MÈTODES



En el nostre projecte hem utilitzat el llenguatge de programació Perl sobre Linux (un sitema operatiu basat en Unix). El cos principal del treball es basa en la creació d'un programa per detectar la proporció de SNPs en el genoma i l'ús de comandes pel tractament previ de les dades. A continuació s'explica el procés amb més detall.

La pàgina web s'ha realitzat amb el sistema de programació HTML.

Els gràfics han estat fets amb l'Excel, del sistema operatiu Windows.



DESCRIPCIÓ DELS FITXERS____________________________________________________________________

Per poder dur a terme aquest projecte hem necessitat dos tipus de fitxers de dades: els que contenien les anotacions d'SNPs i els que contenien les anotacions de gens, ambdós fitxers per humà i ratolí (4 arxius en total).

Les anotacions dels gens amb què hem treballat les hem obtingut de:

  • H.sapiens: /disc8/genomes/H.sapiens/golden_path_200307/database/refGene.txt (versió del Juliol del 2003)
  • M.musculus: /disc8/genomes/M.musculus/golden_path_200302/database/refGene.txt (versió del Febrer del 2003)
    Peró també les podem trobar a la web:
  • http://genome.ucsc.edu/goldenPath/hg16/database/refGene.txt.gz per H.sapiens
  • http://genome.ucsc.edu/goldenPath/mmFeb2003/database/refGene.txt.gz per M.musculus

    Les anotacions dels SNPs es troben a:

  • H.sapiens: /disc8/genomes/H.sapiens/golden_path_200307/database/snpNih.txt o http://genome.ucsc.edu/goldenPath/hg16/database/snpNih.txt.gz

  • M.musculus: /disc8/genomes/M.musculus/golden_path_200302/database/snpNih.txt o http://genome.ucsc.edu/goldenPath/mmFeb2003/database/snpNih.txt.gz

    Els fitxers refGene.txt contenen 21.094 gens en humans i 17.351 gens en ratolí. Aquestes dades les hem obtingut sota l'ordre:

          $wc refGene.txt
    Analitzem el seu format amb un exemple:
    NM_007413 chr11 + 62681954 62698655 62681987 62698611 2 62681954,62697947, 62682322,62698655,
    NM_007413
    chr11
    +
    62681954
    62698655
    62681987
    62698611
    2
    62681954,62697947, 62682322,62698655,
    Anotació del gen
    Cromosoma
    Cadena (reverse/forward)
    Inici trànscrit
    Final trànscrit
    Inici regió codificant
    Final regió codificant
    Nombre d'exons
    Inicis d'exons i finals d'exons ordenats

    Els fitxers snpNhi.txt contenen 3.175.658 SNPs humans i 199.441 SNPs en ratolí; enregistrats sota el següent format:
    609 chr1 3149273 3149274 rs3670156
    609
    chr1
    3149273
    3149274
    rs3670156
    Referència
    Cromosoma
    Inici d'SNP
    Final d'SNP
    Identificador

    La columna de 'final d'SNP' no la tindrem en compte ja que l'SNP no és més que una posició del genoma, amb la d'inici en tenim prou.



    TRACTAMENT DELS FITXERS__________________________________________________________________

    1. Accedim als 4 arxius que es troben al /disc8, dos arxius d'SNPs i dos de gens. En el cas de baixar-los de la web, hauríem de descomprimir-los sota l'ordre:
           $gzip -d refGene.txt 

    2. Creem arxius per cada cromosoma i distribuir els gens de refGene.txt segons el cromosoma al que pertanyen. Tenim així 24 arxius per humans i 21 per ratolí. La comanda per crear els arxius:
           $egrep "chr1[^0-9]" refGene.txt > chr1.txt
      I així per a cada cromosoma. Comencem amb el refGene.txt d'humà i després amb el de ratolí. L'estructura del nom dels diferents arxius és el mateix per cada cromosoma: chr + nº cromosoma (X i Y en cas dels cromosomes sexuals)+ '.txt'. Aquesta estructura és imprescindible perquè el programa creat els reconegui. Els arxius de ratolí i humà es troben en carpetes diferents, i per tant hauran de ser executats des del directori oportú.

    3. No s'ha requerit eliminar anotacions redundants de gens en el fitxer refGene.txt perquè el programa creat descarta les anotacions solapades, tenint en compte només una de les isoformes de cada gen.

    4. Creem un programa que actui sobre l'arxiu de SNPs directament, ja que aquest es masa gran per guardar-lo en un disc local (just on hem estat treballant).

    5. Correm el programa i direccionem els resultats als fitxers resultsH.txt i resultsM.txt (per H.sapiens i M.musculus respectivament).

    6. Per tal d'analitzar el percentatge de gens per cromosoma hem hagut de crear dos arxius de resultats snpcrom.txt i snpcromrat.txt per humà i ratolí respectivament. Aquest arxius conten el nombre d'SNPs per cromosoma. Això ha estat posible amb l'ordre:
           $egrep 'chr1[^0-9] snpNih.txt | wc > snpcrom.txt 
      $egrep 'chr2[^0-9] snpNih.txt | wc >> snpcrom.txt
      ...
      Això pels 24 i 21 cromosomes d'ambdues espècies.



    DESCRIPCIÓ DEL PROGRAMA__________________________________________________________________

    El nostre programa és assaig.pl (per H.sapiens, i amb petites modificacions per M.musculus). Analitzem-lo:

    Mitjançant l'ús del vector ARGV, en executar el programa cal escriure el nom d'aquest i el del fitxer on es troben els SNPs. Veiem l'exemple en cas de H. sapiens:

          ./assaig.pl   /disc8/home/annver04/genomes/H.sapiens/golden_path_200307/database/snpNih.txt 
    L'estructura bàsica del programa és:
    - Un bucle inicial que enregistra tots els cromosomes en una matriu.
    - Un bucle central que recorre tot el llistat d'SNPs.
    - Un petit bucle final que recorre tots els exons del gen trobat.
    - Una funció que busca el gen on es troba l'SNP (semblant a la cerca en un diccionari).

    Aquest programa obre l'arxiu d'SNPs i llegeix fila per fila fins que s'acaba l'arxiu. Depenent del cromosoma al que pertany l'SNP que s'està llegint, obrirà l'arxiu del cromosoma corresponent.

    1. Per fer més ràpid el càlcul hem creat una matriu de tres dimensions (@gens) que té aquest format:
            $gens[$N][$i][ ]
      La coordenada $N fa referència al número de cromosoma, la coordenada $i al número de la fila on es troba el gen, i la tercera coordenada a les columnes de l'arxiu refGene.txt.

      El primer pas és crear una matriu de dos dimensions per a un determinat cromosoma (chrN.txt), això és possible gràcies al primer bucle, que permet enregistrar tots els elements de la matriu augmentant el valor de $i i $N. Serveixi d'exemple la següent matriu:

      NM_007417 chr1 + 54062217 54063570 54062217 54063570 1 54062217, 54063570,
      NM_007418 chr1 + 33988458 33989835 33988458 33989835 1 33988458, 33989835,
      NM_007419 chr1 + 56756166 56757567 56756166 56757567 1 56756166, 56757567,
      ...
      Donat aquest arxiu chr1.txt, creem una matriu on la primera dimensió fa referència a cadascuna de les columnes (descrites al format refGene.txt) i la segona inclou tots els gens d'aquest cromosoma. La variable $i va augmentant de valor fins a enregistrar la totalitat dels gens de l'arxiu, mentre la primera dimensió també augmenta per enregistrar les diferents columnes (aquest és el procés mitjançant el qual encaixem l'estructura del fitxer refGene.txt).
      La matriu de tres dimensions apareix com a resultat de fer matrius de dos dimensions per a cadascun dels fitxers chrN.txt que tenim. Els cromosomes sexuals els hem hagut de passar a números enlloc de lletres perquè el programa pugui enregistrar-los a la matriu.

    2. El bucle central. Aquest bucle permetrà llegir cada línia del fitxer SNPs establint la primera coordenada de la matriu que haurà de recórrer l'arxiu d'SNPs. Cal haver associat el valor del cromosoma al que pertany l'SNP a la primera coordenada de la matriu ($N). En alguns casos no es coneix el cromosoma on pertany un SNP i a l'arxiu snpNih.txt trobem notacions del tipus 'chrUn_random', aquests SNPs seran eliminats de l'estudi pel nostre programa sota la condició:
            if ($N=~ /\A\d+\Z/)
      Així doncs només tindrem en compte aquells amb cromosoma numèric, X i Y.

    3. Per a fer una cerca més ràpida del gen on es troba l'SNP (segona coordenada de la matriu) realitzem una cerca binària mitjançant la funció:
            sub busca_snp
      Perquè aquesta cerca funcioni, primer cal ordenar la matriu en ordre creixent segons els inici de trànscrit de gen mitjançant la comanda:
            @{$gens[$N]}=sort{${$a}[0] <=> ${$b}[0]}  (@{$gens[$N]})

    4. Ara ja sabem el cromosoma ($N) i el gen ($i) on es troba l'SNP. Creem petits bucles per a saber:
      • si SNP es troba en regió d'splicing. Caldrà mirar si la cadena és '+' o '-' per saber en quin cas és acceptor i en quin donador.
      • si es troba en exó, i de ser així si és codificant o forma part d'un UTR.

    5. Declaració de variables. Al llarg del programa declarem diferents variables, algunes de les quals s'usen per recórrer posicions de la matriu ($N o $i per exemple) i d'altres per enregistrar els resultats que ens interessen ($SNPtotal o $SNPenexo). En el cas de $trobat2 s'usa per poder sortir del bucle estalviant temps. D'aquesta manera, quan un SNP estigui contingut en un gen la variable canvia de valor se surt del bucle, evitant contar el mateix gen més d'una vegada.
      Per tenir un control del procés, es demana que mostri per pantalla ('print') si s'està executant correctament el programa.

    6. En el cas de l'anàlisi al genoma de M. musculus només hem hagut d'adaptar el programa tenint en compte que el nombre de cromosomes és 21 enlloc de 24.

    7. Finalment s'imprimeixen les variables que han acumulat els valors que ens interessen i pasem a anlitzar els resultats.