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.ReferenceOrderedDatum;
|
||||||
import org.broadinstitute.sting.gatk.refdata.rodDbSNP;
|
import org.broadinstitute.sting.gatk.refdata.rodDbSNP;
|
||||||
import org.broadinstitute.sting.utils.cmdLine.Argument;
|
import org.broadinstitute.sting.utils.cmdLine.Argument;
|
||||||
|
import org.broadinstitute.sting.utils.Utils;
|
||||||
import net.sf.samtools.SAMRecord;
|
import net.sf.samtools.SAMRecord;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by IntelliJ IDEA.
|
* Created by IntelliJ IDEA.
|
||||||
|
|
@ -26,19 +28,11 @@ public class PileupWalker extends LocusWalker<Integer, Integer> {
|
||||||
return true; // We are keeping all the reads
|
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) {
|
public Integer map(List<ReferenceOrderedDatum> rodData, char ref, LocusContext context) {
|
||||||
List<SAMRecord> reads = context.getReads();
|
List<SAMRecord> reads = context.getReads();
|
||||||
List<Integer> offsets = context.getOffsets();
|
List<Integer> offsets = context.getOffsets();
|
||||||
String bases = "";
|
String bases = Utils.basePileupAsString(reads, offsets);
|
||||||
String quals = "";
|
String quals = Utils.qualPileupAsString(reads, offsets);
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( bases.equals("") && FLAG_UNCOVERED_BASES ) {
|
if ( bases.equals("") && FLAG_UNCOVERED_BASES ) {
|
||||||
bases = "*** UNCOVERED SITE ***";
|
bases = "*** UNCOVERED SITE ***";
|
||||||
|
|
|
||||||
|
|
@ -118,6 +118,46 @@ public class Utils {
|
||||||
return c;
|
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) {
|
public static ArrayList<Byte> subseq(byte[] fullArray) {
|
||||||
return subseq(fullArray, 0, fullArray.length);
|
return subseq(fullArray, 0, fullArray.length);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue