From 65995887fc2614c64c0fbc01363eedda9729d5e2 Mon Sep 17 00:00:00 2001 From: depristo Date: Thu, 21 May 2009 22:25:37 +0000 Subject: [PATCH] Releasable version of the Pileup walker git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@786 348d0f76-0448-11de-a6fe-93d51630548a --- .../sting/gatk/walkers/PileupWalker.java | 58 +++++++++++++------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java b/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java index 3d9b00e56..66d2cbf40 100644 --- a/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java +++ b/java/src/org/broadinstitute/sting/gatk/walkers/PileupWalker.java @@ -6,43 +6,65 @@ import org.broadinstitute.sting.gatk.refdata.rodDbSNP; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.utils.cmdLine.Argument; import org.broadinstitute.sting.utils.ReadBackedPileup; +import org.broadinstitute.sting.utils.Utils; +import net.sf.samtools.SAMRecord; + +import java.util.List; /** - * Created by IntelliJ IDEA. - * User: mdepristo - * Date: Feb 22, 2009 - * Time: 3:22:14 PM - * To change this template use File | Settings | File Templates. + * samtools pileup [-f in.ref.fasta] [-t in.ref_list] [-l in.site_list] [-iscg] [-T theta] [-N nHap] [-r pairDiffRate] + * + * Print the alignment in the pileup format. In the pileup format, each line represents a genomic position, + * consisting of chromosome name, coordinate, reference base, read bases, read qualities and alignment mapping + * qualities. Information on match, mismatch, indel, strand, mapping quality and start and end of a read are all + * encoded at the read base column. At this column, a dot stands for a match to the reference base on the forward strand, + * a comma for a match on the reverse strand, ÔACGTNÕ for a mismatch on the forward strand and ÔacgtnÕ for a mismatch on the + * reverse strand. + * + * A pattern Ô\+[0-9]+[ACGTNacgtn]+Õ indicates there is an insertion between this reference position and the next + * reference position. The length of the insertion is given by the integer in the pattern, followed by the inserted sequence. + * Similarly, a pattern Ô-[0-9]+[ACGTNacgtn]+Õ represents a deletion from the reference. + * Also at the read base column, a symbol Ô^Õ marks the start of a read segment which is a contiguous subsequence on the read + * separated by ÔN/S/HÕ CIGAR operations. The ASCII of the character following Ô^Õ minus 33 gives the mapping quality. + * A symbol Ô$Õ marks the end of a read segment. */ public class PileupWalker extends LocusWalker implements TreeReducible { - @Argument(fullName="verbose",doc="verbose",required=false) - public boolean VERBOSE = false; + @Argument(fullName="alwaysShowSecondBase",doc="If true, prints dummy bases for the second bases in the BAM file where they are missing",required=false) + public boolean alwaysShowSecondBase = false; + + @Argument(fullName="showSecondBaseQuals",doc="If true, prints out second base qualities in the pileup",required=false) + public boolean showSecondBaseQuals = false; + @Argument(fullName="extended",shortName="ext",doc="extended",required=false) public boolean EXTENDED = false; - + public boolean FLAG_UNCOVERED_BASES = true; // todo: how do I make this a command line argument? public void initialize() { } - // Do we actually want to operate on the context? - public boolean filter(RefMetaDataTracker tracker, char ref, LocusContext context) { - return true; // We are keeping all the reads - } - public Integer map(RefMetaDataTracker tracker, char ref, LocusContext context) { ReadBackedPileup pileup = new ReadBackedPileup(ref, context); String bases = pileup.getBases(); if ( bases.equals("") && FLAG_UNCOVERED_BASES ) { - bases = "*** UNCOVERED SITE ***"; + bases = "***UNCOVERED_SITE***"; } - String extras = ""; - if ( VERBOSE ) { - extras += " BQ=" + pileup.getQualsAsInts(); - extras += " MQ=" + pileup.getMappingQualsAsInts(); + StringBuilder extras = new StringBuilder(); + + String secondBasePileup = pileup.getSecondaryBasePileup(); + if ( secondBasePileup == null && alwaysShowSecondBase ) { + secondBasePileup = Utils.dupString('N', bases.length()); + } + if ( secondBasePileup != null ) extras.append(" ").append(secondBasePileup); + + if ( showSecondBaseQuals ) { + String secondQualPileup = pileup.getSecondaryQualPileup(); + if ( secondQualPileup == null ) + secondQualPileup = Utils.dupString((char)(33), bases.length()); + extras.append(" ").append(secondQualPileup); } String rodString = "";