HTML

Az élet kódjai

Csináld maga. Senki nem csinálja meg helyetted.

Friss topikok

BAM fájl feldolgozás Java nyelven

2012.10.26. 20:36 Travis.CG

A SAM a rövid szekvencia illesztések legelterjedtebb fájltípusa. Egyszerűségét az adja, hogy minden egyes sor egy szekvenciát jelent, valamint tabulátorral elválasztott oszlopai vannak. Akár egy egyszerű awk szkripttel is feldolgozhatjuk őket.

Hátrányuk, hogy szöveges fájlok révén, sok helyet foglalnak. Erre született meg egy hibrid megoldás, a BAM, ami egy tömörített SAM fájl. Annak érdekében, hogy lehetővé tegyék a gyors pozícionálást az állományon belül (teljes kicsomagolás nélkül), rekordonként tömörítenek.

A Picard egy Java nyelven írt SAM/BAM feldolgozó programcsomag. Előnye, hogy rendelkezik egy API-val, aminek segítségével mi is írhatunk olyan programokat, melyek egyszerre képesek SAM és BAM fájlokat is kezelni.

Nem kell mást tennünk, mint felvenni a sam-1.77.jar állományt a classpath-ba és máris használhatjuk azt. Elég részletes dokumentációval rendelkezik, de egyes helyeken hiányosságok vannak benne.

Első lépés, hogy importáljuk a szükséges osztályokat.

import net.sf.samtools.*;

A Picard API-nak van egy olyan előnye is, hogy képes ellenőrizni, mennyire felel meg a feldolgozandó állomány a szabványnak. Ha nem megfelelő értékeket talál, kivételt dob. Sajnos sok program lazán kezeli a formátum megkötéseit, ezért ha ilyen fájlokat használunk, célszerű lehet beállítani, hogy az API hunyjon szemet a hibák felett:

SAMFileReader.setDefaultValidationStringency(
         SAMFileReader.ValidationStringency.SILENT);

A beállítást a konstruktor meghívása előtt kell végrehajtani. A SAMFileReader osztály segítségével olvashatjuk be magát a fájlt. Használata rendkívül egyszerű:

SAMFileReader sam = new SAMFileReader(new File(filename));
for(SAMRecord record : sam){
  // record processing
}
sam.close()

A SAMRecord osztály segítségével érhetjük el a fájl rekordjait. Minden egyes mezőhöz a SAM fájlban tartozik egy getter metódus, aminek segítségével lekérdezhetjük az értékét. A dokumentáció részletesen ír ezekről.

Természetesen setter metódusok is vannak, ha mi magunk akarnánk SAM formátumba menteni. Ekkor a rekordokat a SAMFileWriter segítségével varázsolhatjuk a merevlemezre.

A SAM állományok legbonyolultabb eleme a Cigar. Ez írja le, hogyan illeszkedik a rekord a referenciára. A Cigar egy sorozat, aminek minden eleme egy számból és az egy karakter hosszú műveletből áll. Ezt a felépítést a Java osztályokból is láthatjuk. A Cigar osztály getCigarElements() metódusa egy listát ad vissza az elérhető elemekkel. A getCigarElement() ellenben sorszám szerint ad vissza egyetlen elemet. A következő program megvizsgálja, hogy van-e olyan rekord, ahol inszerció és deléció egymás mellett van. Ez ugyanis szekvencia illesztési hibára utalhat. Ha ilyet talál, kiírja a referencia pozíciót.

        for(SAMRecord record: sam){
            
            Cigar cigar = record.getCigar();
            int pos = record.getAlignmentStart();
            
            for(int i = 1; i < cigar.numCigarElements(); i++){
                
                CigarElement element = cigar.getCigarElement(i);
                CigarElement prevelement = cigar.getCigarElement(i-1);
                pos += prevelement.getLength();
                
                if( (element.getOperator() == CigarOperator.DELETION &&
                     prevelement.getOperator() == CigarOperator.INSERTION) ||
                     (element.getOperator() == CigarOperator.INSERTION &&
                      prevelement.getOperator() == CigarOperator.DELETION)
                  ){
                    System.out.println(pos);
                }
            }
        }

Sajnos normális esetben nem ír ki semmit a program, ezért módosítsuk a feltételben szereplő elemeket, ha csak a működést szeretnénk ellenőrizni.

Az alacsony szintű osztályok mellett megtalálhatóak a Picard programcsomag funkcióit lefedő osztályok is. Ilyen például a ReorderSam, ami a hasonló nevű program tudását varázsolja saját kódunkba. Ezeket az osztályokat könnyű felismerni, mert nevük megegyezik az alkalmazás nevével.

A Picard Java osztályai lehetővé teszik, hogy egyszerűen fejlesszünk SAM/BAM állományt kezelő programokat, alacsony vagy magas szinten. Használjuk bátran!

Szólj hozzá! · 1 trackback

Címkék: java programozás bioinformatika

A bejegyzés trackback címe:

https://cybernetic.blog.hu/api/trackback/id/tr194823874

Trackbackek, pingbackek:

Trackback: Elavult verzióra dolgozik a Java-fejlesztők egy negyede 2014.05.23. 23:48:10

Bár már több mint egy éve nem támogatott, még rengeteg helyen dolgoznak programozók a Java 6-ra

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása