High performance pileup code and utilities
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@242 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
ad63633b1c
commit
385736469c
|
|
@ -4,9 +4,11 @@ import org.broadinstitute.sting.gatk.LocusContext;
|
|||
import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum;
|
||||
import org.broadinstitute.sting.gatk.refdata.rodDbSNP;
|
||||
import org.broadinstitute.sting.utils.cmdLine.Argument;
|
||||
import org.broadinstitute.sting.utils.Utils;
|
||||
import net.sf.samtools.SAMRecord;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
|
|
@ -26,19 +28,11 @@ public class PileupWalker extends LocusWalker<Integer, Integer> {
|
|||
return true; // We are keeping all the reads
|
||||
}
|
||||
|
||||
// Map over the org.broadinstitute.sting.gatk.LocusContext
|
||||
public Integer map(List<ReferenceOrderedDatum> rodData, char ref, LocusContext context) {
|
||||
List<SAMRecord> reads = context.getReads();
|
||||
List<Integer> offsets = context.getOffsets();
|
||||
String bases = "";
|
||||
String quals = "";
|
||||
for ( int i = 0; i < reads.size(); i++ ) {
|
||||
SAMRecord read = reads.get(i);
|
||||
int offset = offsets.get(i);
|
||||
|
||||
bases += read.getReadString().charAt(offset);
|
||||
quals += read.getBaseQualityString().charAt(offset);
|
||||
}
|
||||
String bases = Utils.basePileupAsString(reads, offsets);
|
||||
String quals = Utils.qualPileupAsString(reads, offsets);
|
||||
|
||||
if ( bases.equals("") && FLAG_UNCOVERED_BASES ) {
|
||||
bases = "*** UNCOVERED SITE ***";
|
||||
|
|
|
|||
|
|
@ -118,6 +118,46 @@ public class Utils {
|
|||
return c;
|
||||
}
|
||||
|
||||
public static String basePileupAsString( List<SAMRecord> reads, List<Integer> offsets ) {
|
||||
StringBuilder bases = new StringBuilder();
|
||||
for ( byte base : basePileup(reads, offsets)) {
|
||||
bases.append((char)base);
|
||||
}
|
||||
return bases.toString();
|
||||
}
|
||||
|
||||
public static ArrayList<Byte> basePileup( List<SAMRecord> reads, List<Integer> offsets ) {
|
||||
ArrayList<Byte> bases = new ArrayList(reads.size());
|
||||
for ( int i = 0; i < reads.size(); i++ ) {
|
||||
SAMRecord read = reads.get(i);
|
||||
int offset = offsets.get(i);
|
||||
bases.add(read.getReadBases()[offset]);
|
||||
}
|
||||
return bases;
|
||||
}
|
||||
|
||||
public static ArrayList<Byte> qualPileup( List<SAMRecord> reads, List<Integer> offsets ) {
|
||||
ArrayList<Byte> quals = new ArrayList(reads.size());
|
||||
for ( int i = 0; i < reads.size(); i++ ) {
|
||||
SAMRecord read = reads.get(i);
|
||||
int offset = offsets.get(i);
|
||||
byte qual = (byte)read.getBaseQualities()[offset];
|
||||
quals.add(qual);
|
||||
}
|
||||
return quals;
|
||||
}
|
||||
|
||||
public static String qualPileupAsString( List<SAMRecord> reads, List<Integer> offsets ) {
|
||||
StringBuilder quals = new StringBuilder();
|
||||
for ( int qual : qualPileup(reads, offsets)) {
|
||||
qual = Math.min(qual, 63); // todo: fixme, this isn't a good idea
|
||||
char qualChar = (char) (33 + qual); // todo: warning, this is illegal for qual > 63
|
||||
quals.append(qualChar);
|
||||
}
|
||||
|
||||
return quals.toString();
|
||||
}
|
||||
|
||||
public static ArrayList<Byte> subseq(byte[] fullArray) {
|
||||
return subseq(fullArray, 0, fullArray.length);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue