Renamed GATKSamRecord -> GATKSAMRecord for consistency. Better docs.

This commit is contained in:
Mark DePristo 2011-10-21 09:59:24 -04:00
parent 110e13bc1e
commit 2403e96062
10 changed files with 67 additions and 42 deletions

View File

@ -39,7 +39,7 @@ import org.broadinstitute.sting.utils.pileup.ExtendedEventPileupElement;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedExtendedEventPileup;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
import org.broadinstitute.sting.utils.sam.GATKSamRecord;
import org.broadinstitute.sting.utils.sam.GATKSAMRecord;
import org.broadinstitute.sting.utils.sam.ReadUtils;
import org.broadinstitute.sting.utils.variantcontext.Allele;
import org.broadinstitute.sting.utils.variantcontext.VariantContext;
@ -125,7 +125,7 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood
for ( ExtendedEventPileupElement p : indelPileup.toExtendedIterable() ) {
//SAMRecord read = p.getRead();
GATKSamRecord read = ReadUtils.hardClipAdaptorSequence(p.getRead());
GATKSAMRecord read = ReadUtils.hardClipAdaptorSequence(p.getRead());
if (read == null)
continue;
if(ReadUtils.is454Read(read)) {

View File

@ -41,7 +41,7 @@ import org.broadinstitute.sting.utils.collections.NestedHashMap;
import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException;
import org.broadinstitute.sting.utils.exceptions.UserException;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.sam.GATKSamRecord;
import org.broadinstitute.sting.utils.sam.GATKSAMRecord;
import java.io.PrintStream;
import java.util.ArrayList;
@ -352,7 +352,7 @@ public class CountCovariatesWalker extends LocusWalker<CountCovariatesWalker.Cou
if( tracker.getValues(knownSites).size() == 0 ) { // If something here is in one of the knownSites tracks then skip over it, otherwise proceed
// For each read at this locus
for( final PileupElement p : context.getBasePileup() ) {
final GATKSamRecord gatkRead = (GATKSamRecord) p.getRead();
final GATKSAMRecord gatkRead = (GATKSAMRecord) p.getRead();
int offset = p.getOffset();
if( gatkRead.containsTemporaryAttribute( SKIP_RECORD_ATTRIBUTE ) ) {
@ -445,7 +445,7 @@ public class CountCovariatesWalker extends LocusWalker<CountCovariatesWalker.Cou
* @param offset The offset in the read for this locus
* @param refBase The reference base at this locus
*/
private void updateDataFromRead(CountedData counter, final GATKSamRecord gatkRead, final int offset, final byte refBase) {
private void updateDataFromRead(CountedData counter, final GATKSAMRecord gatkRead, final int offset, final byte refBase) {
final Object[][] covars = (Comparable[][]) gatkRead.getTemporaryAttribute(COVARS_ATTRIBUTE);
final Object[] key = covars[offset];

View File

@ -4,7 +4,7 @@ import net.sf.samtools.SAMRecord;
import org.broadinstitute.sting.utils.BaseUtils;
import org.broadinstitute.sting.utils.NGSPlatform;
import org.broadinstitute.sting.utils.exceptions.UserException;
import org.broadinstitute.sting.utils.sam.GATKSamRecord;
import org.broadinstitute.sting.utils.sam.GATKSAMRecord;
import java.util.Arrays;
import java.util.EnumSet;
@ -71,7 +71,7 @@ public class CycleCovariate implements StandardCovariate {
// Illumina, Solid, PacBio, and Complete Genomics
//-----------------------------
final NGSPlatform ngsPlatform = ((GATKSamRecord)read).getNGSPlatform();
final NGSPlatform ngsPlatform = ((GATKSAMRecord)read).getNGSPlatform();
if( DISCRETE_CYCLE_PLATFORMS.contains(ngsPlatform) ) {
final int init;
final int increment;

View File

@ -36,7 +36,7 @@ import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
import org.broadinstitute.sting.utils.exceptions.UserException;
import org.broadinstitute.sting.utils.sam.AlignmentUtils;
import org.broadinstitute.sting.utils.sam.GATKSAMReadGroupRecord;
import org.broadinstitute.sting.utils.sam.GATKSamRecord;
import org.broadinstitute.sting.utils.sam.GATKSAMRecord;
import java.util.ArrayList;
import java.util.List;
@ -229,7 +229,7 @@ public class RecalDataManager {
* @param RAC The list of shared command line arguments
*/
public static void parseSAMRecord( final SAMRecord read, final RecalibrationArgumentCollection RAC ) {
GATKSAMReadGroupRecord readGroup = ((GATKSamRecord)read).getReadGroup();
GATKSAMReadGroupRecord readGroup = ((GATKSAMRecord)read).getReadGroup();
// If there are no read groups we have to default to something, and that something could be specified by the user using command line arguments
if( readGroup == null ) {
@ -243,7 +243,7 @@ public class RecalDataManager {
// There is no readGroup so defaulting to these values
readGroup = new GATKSAMReadGroupRecord( RAC.DEFAULT_READ_GROUP );
readGroup.setPlatform( RAC.DEFAULT_PLATFORM );
((GATKSamRecord)read).setReadGroup( readGroup );
((GATKSAMRecord)read).setReadGroup( readGroup );
} else {
throw new UserException.MalformedBAM(read, "The input .bam file contains reads with no read group. First observed at read with name = " + read.getReadName() );
}
@ -253,7 +253,7 @@ public class RecalDataManager {
final String oldPlatform = readGroup.getPlatform();
readGroup = new GATKSAMReadGroupRecord( RAC.FORCE_READ_GROUP );
readGroup.setPlatform( oldPlatform );
((GATKSamRecord)read).setReadGroup( readGroup );
((GATKSAMRecord)read).setReadGroup( readGroup );
}
if( RAC.FORCE_PLATFORM != null && (readGroup.getPlatform() == null || !readGroup.getPlatform().equals(RAC.FORCE_PLATFORM))) {
@ -572,7 +572,7 @@ public class RecalDataManager {
* value for the ith position in the read and the jth covariate in
* reqeustedCovariates list.
*/
public static Comparable[][] computeCovariates(final GATKSamRecord gatkRead, final List<Covariate> requestedCovariates) {
public static Comparable[][] computeCovariates(final GATKSAMRecord gatkRead, final List<Covariate> requestedCovariates) {
//compute all covariates for this read
final List<Covariate> requestedCovariatesRef = requestedCovariates;
final int numRequestedCovariates = requestedCovariatesRef.size();

View File

@ -39,7 +39,7 @@ import org.broadinstitute.sting.utils.classloader.PluginManager;
import org.broadinstitute.sting.utils.collections.NestedHashMap;
import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException;
import org.broadinstitute.sting.utils.exceptions.UserException;
import org.broadinstitute.sting.utils.sam.GATKSamRecord;
import org.broadinstitute.sting.utils.sam.GATKSAMRecord;
import org.broadinstitute.sting.utils.text.TextFormattingUtils;
import org.broadinstitute.sting.utils.text.XReadLines;
@ -398,7 +398,7 @@ public class TableRecalibrationWalker extends ReadWalker<SAMRecord, SAMFileWrite
//compute all covariate values for this read
final Comparable[][] covariateValues_offset_x_covar =
RecalDataManager.computeCovariates((GATKSamRecord) read, requestedCovariates);
RecalDataManager.computeCovariates((GATKSAMRecord) read, requestedCovariates);
// For each base in the read
for( int offset = 0; offset < read.getReadLength(); offset++ ) {

View File

@ -29,7 +29,7 @@ import net.sf.samtools.SAMRecord;
/**
* A canonical, master list of the standard NGS platforms. These values
* can be obtained (efficiently) from a GATKSamRecord object with the
* can be obtained (efficiently) from a GATKSAMRecord object with the
* getNGSPlatform method.
*
* @author Mark DePristo
@ -65,7 +65,7 @@ public enum NGSPlatform {
/**
* Convenience constructor -- calculates the NGSPlatfrom from a SAMRecord.
* Note you should not use this function if you have a GATKSamRecord -- use the
* Note you should not use this function if you have a GATKSAMRecord -- use the
* accessor method instead.
*
* @param read

View File

@ -146,7 +146,7 @@ public class ArtificialSAMUtils {
if( (refIndex == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX && alignmentStart != SAMRecord.NO_ALIGNMENT_START) ||
(refIndex != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX && alignmentStart == SAMRecord.NO_ALIGNMENT_START) )
throw new ReviewedStingException("Invalid alignment start for artificial read, start = " + alignmentStart);
SAMRecord record = new GATKSamRecord(header);
SAMRecord record = new GATKSAMRecord(header);
record.setReadName(name);
record.setReferenceIndex(refIndex);
record.setAlignmentStart(alignmentStart);

View File

@ -1,3 +1,27 @@
/*
* Copyright (c) 2011, The Broad Institute
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
package org.broadinstitute.sting.utils.sam;
import net.sf.samtools.*;
@ -7,23 +31,17 @@ import java.util.HashMap;
import java.util.Map;
/**
* @author ebanks
* @author ebanks, depristo
* GATKSAMRecord
*
* this class extends the samtools SAMRecord class and caches important
* this class extends the samtools BAMRecord class (and SAMRecord) and caches important
* (and oft-accessed) data that's not already cached by the SAMRecord class
*
* IMPORTANT NOTE: Because ReadGroups are not set through the SAMRecord,
* if they are ever modified externally then one must also invoke the
* setReadGroup() method here to ensure that the cache is kept up-to-date.
*
* 13 Oct 2010 - mhanna - this class is fundamentally flawed: it uses a decorator
* pattern to wrap a heavyweight object, which can lead
* to heinous side effects if the wrapping is not carefully
* done. Hopefully SAMRecord will become an interface and
* this will eventually be fixed.
*/
public class GATKSamRecord extends BAMRecord {
public class GATKSAMRecord extends BAMRecord {
// the SAMRecord data we're caching
private String mReadString = null;
private GATKSAMReadGroupRecord mReadGroup = null;
@ -41,13 +59,12 @@ public class GATKSamRecord extends BAMRecord {
* HACK TO CREATE GATKSAMRECORD WITH ONLY A HEADER FOR TESTING PURPOSES ONLY
* @param header
*/
public GATKSamRecord(final SAMFileHeader header) {
public GATKSAMRecord(final SAMFileHeader header) {
super(header, SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX, SAMRecord.NO_ALIGNMENT_START,
(short)0, (short)255, 0, 1, 0, 1, 0, 0, 0, null);
}
public GATKSamRecord(final SAMFileHeader header,
public GATKSAMRecord(final SAMFileHeader header,
final int referenceSequenceIndex,
final int alignmentStart,
final short readNameLength,
@ -91,6 +108,10 @@ public class GATKSamRecord extends BAMRecord {
return mReadGroup;
}
/**
* Efficient caching accessor that returns the GATK NGSPlatform of this read
* @return
*/
public NGSPlatform getNGSPlatform() {
return getReadGroup().getNGSPlatform();
}
@ -153,12 +174,16 @@ public class GATKSamRecord extends BAMRecord {
return null;
}
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
// note -- this forbids a GATKSAMRecord being equal to its underlying SAMRecord
if (!(o instanceof GATKSamRecord)) return false;
if (!(o instanceof GATKSAMRecord)) return false;
// note that we do not consider the GATKSAMRecord internal state at all
return super.equals(o);

View File

@ -57,7 +57,7 @@ public class GATKSamRecordFactory implements SAMRecordFactory {
final int mateAlignmentStart,
final int insertSize,
final byte[] variableLengthBlock) {
return new GATKSamRecord(header,
return new GATKSAMRecord(header,
referenceSequenceIndex,
alignmentStart,
readNameLength,

View File

@ -55,7 +55,7 @@ public class ReadUtils {
public static final String REDUCED_READ_CONSENSUS_COUNTS_TAG = "CC";
public final static byte[] getReducedReadQualityTagValue(final SAMRecord read) {
// TODO -- warning of performance problem. Should be cached in GATKSamRecord
// TODO -- warning of performance problem. Should be cached in GATKSAMRecord
return read.getByteArrayAttribute(ReadUtils.REDUCED_READ_QUALITY_TAG);
}
@ -260,10 +260,10 @@ public class ReadUtils {
* @param adaptorLength length of adaptor sequence
* @return a new read with adaptor sequence hard-clipped out or null if read is fully clipped
*/
public static GATKSamRecord hardClipAdaptorSequence(final SAMRecord rec, int adaptorLength) {
public static GATKSAMRecord hardClipAdaptorSequence(final SAMRecord rec, int adaptorLength) {
Pair<Integer, Integer> adaptorBoundaries = getAdaptorBoundaries(rec, adaptorLength);
GATKSamRecord result = (GATKSamRecord)rec;
GATKSAMRecord result = (GATKSAMRecord)rec;
if ( adaptorBoundaries != null ) {
if ( rec.getReadNegativeStrandFlag() && adaptorBoundaries.second >= rec.getAlignmentStart() && adaptorBoundaries.first < rec.getAlignmentEnd() )
@ -276,7 +276,7 @@ public class ReadUtils {
}
// return true if the read needs to be completely clipped
private static GATKSamRecord hardClipStartOfRead(SAMRecord oldRec, int stopPosition) {
private static GATKSAMRecord hardClipStartOfRead(SAMRecord oldRec, int stopPosition) {
if ( stopPosition >= oldRec.getAlignmentEnd() ) {
// BAM representation issue -- we can't clip away all bases in a read, just leave it alone and let the filter deal with it
@ -284,9 +284,9 @@ public class ReadUtils {
return null;
}
GATKSamRecord rec;
GATKSAMRecord rec;
try {
rec = (GATKSamRecord)oldRec.clone();
rec = (GATKSAMRecord)oldRec.clone();
} catch (Exception e) {
return null;
}
@ -356,7 +356,7 @@ public class ReadUtils {
return rec;
}
private static GATKSamRecord hardClipEndOfRead(SAMRecord oldRec, int startPosition) {
private static GATKSAMRecord hardClipEndOfRead(SAMRecord oldRec, int startPosition) {
if ( startPosition <= oldRec.getAlignmentStart() ) {
// BAM representation issue -- we can't clip away all bases in a read, just leave it alone and let the filter deal with it
@ -364,9 +364,9 @@ public class ReadUtils {
return null;
}
GATKSamRecord rec;
GATKSAMRecord rec;
try {
rec = (GATKSamRecord)oldRec.clone();
rec = (GATKSAMRecord)oldRec.clone();
} catch (Exception e) {
return null;
}
@ -584,7 +584,7 @@ public class ReadUtils {
* @param rec original SAM record
* @return a new read with adaptor sequence hard-clipped out or null if read is fully clipped
*/
public static GATKSamRecord hardClipAdaptorSequence(final SAMRecord rec) {
public static GATKSAMRecord hardClipAdaptorSequence(final SAMRecord rec) {
return hardClipAdaptorSequence(rec, DEFAULT_ADAPTOR_SIZE);
}