public class SAMRecord extends java.lang.Object implements java.lang.Cloneable, Locatable, java.io.Serializable
The presence of reference name/reference index and alignment start do not necessarily mean that a read is aligned. Those values may merely be set to force a SAMRecord to appear in a certain place in the sort order. The readUnmappedFlag must be checked to determine whether or not a read is mapped. Only if the readUnmappedFlag is false can the reference name/index and alignment start be interpreted as indicating an actual alignment position.
Likewise, presence of mate reference name/index and mate alignment start do not necessarily mean that the mate is aligned. These may be set for an unaligned mate if the mate has been forced into a particular place in the sort order per the above paragraph. Only if the mateUnmappedFlag is false can the mate reference name/index and mate alignment start be interpreted as indicating the actual alignment position of the mate.
Note also that there are a number of getters & setters that are linked, i.e. they present different representations of the same underlying data. In these cases there is typically a representation that is preferred because it ought to be faster than some other representation. The following are the preferred representations:
setHeader() is called by the SAM reading code, so the get/setReferenceIndex() and get/setMateReferenceIndex() methods will have access to the sequence dictionary to resolve reference and mate reference names to dictionary indices.
setHeader() need not be called explicitly when writing SAMRecords, however the writers require a record in order to call get/setReferenceIndex() and get/setMateReferenceIndex(). Therefore adding records to a writer has a side effect: any record that does not have an assigned header at the time it is added to a writer will be updated and assigned the header associated with the writer.
Some of the get() methods return values that are mutable, due to the limitations of Java. A caller should never change the value returned by a get() method. If you want to change the value of some attribute of a SAMRecord, create a new value object and call the appropriate set() method.
Note that setIndexingBin() need not be called when writing SAMRecords. It will be computed as necessary. It is only present as an optimization in the event that the value is already known and need not be computed.By default, extensive validation of SAMRecords is done when they are read. Very limited validation is done when values are set onto SAMRecords.
If the header is null, the following SAMRecord methods may throw exceptions:
Record comparators (i.e. SAMRecordCoordinateComparator and SAMRecordDuplicateComparator) require records with non-null header values.
A record with null a header may be validated by the isValid method, but the reference and mate reference indices, read group, sequence dictionary, and alignment start will not be fully validated unless a header is present.
Also, SAMTextWriter, BAMFileWriter, and CRAMFileWriter all require the reference and mate reference names to be valid in order to be written. At the time a record is added to a writer it will be updated to use the header associated with the writer and the reference and mate reference names must be valid for that header. If the names cannot be resolved using the writer's header, an exception will be thrown.
Modifier and Type | Class and Description |
---|---|
static class |
SAMRecord.SAMTagAndValue
Tag name and value of an attribute, for getAttributes() method.
|
Modifier and Type | Field and Description |
---|---|
static int |
MAX_INSERT_SIZE
abs(insertSize) must be <= this
|
protected java.lang.Integer |
mMateReferenceIndex |
protected java.lang.Integer |
mReferenceIndex |
static java.lang.String |
NO_ALIGNMENT_CIGAR
Cigar string for an unaligned read.
|
static int |
NO_ALIGNMENT_REFERENCE_INDEX
If a read has this reference index, it is unaligned, but not all unaligned reads have
this reference index (see above).
|
static java.lang.String |
NO_ALIGNMENT_REFERENCE_NAME
If a read has this reference name, it is unaligned, but not all unaligned reads have
this reference name (see above).
|
static int |
NO_ALIGNMENT_START
If a read has reference name "*", it will have this value for position.
|
static int |
NO_MAPPING_QUALITY
Alignment score for an unaligned read.
|
static byte[] |
NULL_QUALS
This should rarely be used, since all reads should have quality scores.
|
static java.lang.String |
NULL_QUALS_STRING |
static byte[] |
NULL_SEQUENCE
This should rarely be used, since a read with no sequence doesn't make much sense.
|
static java.lang.String |
NULL_SEQUENCE_STRING |
static long |
serialVersionUID |
static java.util.List<java.lang.String> |
TAGS_TO_REVERSE
Tags that are known to need the reverse if the read is reverse complemented.
|
static java.util.List<java.lang.String> |
TAGS_TO_REVERSE_COMPLEMENT
Tags that are known to need the reverse complement if the read is reverse complemented.
|
static int |
UNKNOWN_MAPPING_QUALITY
Alignment score for a good alignment, but where computing a Phred-score is not feasible.
|
Constructor and Description |
---|
SAMRecord(SAMFileHeader header) |
Modifier and Type | Method and Description |
---|---|
void |
clearAttributes()
Removes all attributes.
|
java.lang.Object |
clone()
Note that this does a shallow copy of everything, except for the attribute list, for which a copy of the list
is made, but the attributes themselves are copied by reference.
|
SAMRecord |
deepCopy()
Returns a deep copy of the SAM record, with the following exceptions:
- The header field, which shares the header reference with the original record
- The file source field, which will always always be set to null in the copy
|
protected void |
eagerDecode()
Force all lazily-initialized data members to be initialized.
|
boolean |
equals(java.lang.Object o) |
java.lang.String |
format()
Deprecated.
This method is not guaranteed to return a valid SAM text representation of the SAMRecord.
To get standard SAM text representation,
getSAMString() . |
java.util.List<AlignmentBlock> |
getAlignmentBlocks()
Returns blocks of the read sequence that have been aligned directly to the
reference sequence.
|
int |
getAlignmentEnd() |
int |
getAlignmentStart() |
java.lang.Object |
getAttribute(short tag) |
java.lang.Object |
getAttribute(java.lang.String tag)
Get the value for a SAM tag.
|
java.util.List<SAMRecord.SAMTagAndValue> |
getAttributes() |
int |
getAttributesBinarySize()
Depending on the concrete implementation, the binary file size of attributes may be known without
computing them all.
|
byte[] |
getBaseQualities()
Do not modify the value returned by this method.
|
java.lang.String |
getBaseQualityString() |
protected SAMBinaryTagAndValue |
getBinaryAttributes() |
byte[] |
getByteArrayAttribute(java.lang.String tag)
Will work for signed byte array, unsigned byte array, or old-style hex array
|
java.lang.Byte |
getByteAttribute(java.lang.String tag)
Get the tag value and attempt to coerce it into the requested type.
|
java.lang.Character |
getCharacterAttribute(java.lang.String tag) |
Cigar |
getCigar()
Do not modify the value returned by this method.
|
int |
getCigarLength()
This method is preferred over getCigar().getNumElements(), because for BAMRecord it may be faster.
|
java.lang.String |
getCigarString() |
java.lang.String |
getContig()
Gets the contig name for the contig this is mapped to.
|
boolean |
getDuplicateReadFlag()
the read is either a PCR duplicate or an optical duplicate.
|
int |
getEnd()
an alias of
getAlignmentEnd() |
SAMFileSource |
getFileSource()
Gets the source of this SAM record -- both the reader that retrieved the record and the position on disk from
whence it came.
|
boolean |
getFirstOfPairFlag()
the read is the first read in a pair.
|
int |
getFlags()
It is preferable to use the get*Flag() methods that handle the flag word symbolically.
|
float[] |
getFloatArrayAttribute(java.lang.String tag) |
java.lang.Float |
getFloatAttribute(java.lang.String tag) |
SAMFileHeader |
getHeader() |
int |
getInferredInsertSize() |
java.lang.Integer |
getIntegerAttribute(java.lang.String tag)
Get the tag value and attempt to coerce it into the requested type.
|
int |
getMappingQuality() |
int |
getMateAlignmentStart() |
boolean |
getMateNegativeStrandFlag()
strand of the mate (false for forward; true for reverse strand).
|
java.lang.Integer |
getMateReferenceIndex()
Returns the mate reference index for this record.
|
java.lang.String |
getMateReferenceName() |
boolean |
getMateUnmappedFlag()
the mate is unmapped.
|
boolean |
getNotPrimaryAlignmentFlag()
the alignment is not primary (a read having split hits may have multiple primary alignment records).
|
byte[] |
getOriginalBaseQualities()
If the original base quality scores have been store in the "OQ" tag will return the numeric
score as a byte[]
|
java.lang.String |
getPairedReadName() |
boolean |
getProperPairFlag()
the read is mapped in a proper pair (depends on the protocol, normally inferred during alignment).
|
byte[] |
getReadBases()
Do not modify the value returned by this method.
|
boolean |
getReadFailsVendorQualityCheckFlag()
the read fails platform/vendor quality checks.
|
SAMReadGroupRecord |
getReadGroup()
Get the SAMReadGroupRecord for this SAMRecord.
|
int |
getReadLength()
This method is preferred over getReadBases().length, because for BAMRecord it may be faster.
|
java.lang.String |
getReadName() |
int |
getReadNameLength()
This method is preferred over getReadName().length(), because for BAMRecord
it may be faster.
|
boolean |
getReadNegativeStrandFlag()
strand of the query (false for forward; true for reverse strand).
|
boolean |
getReadPairedFlag()
the read is paired in sequencing, no matter whether it is mapped in a pair.
|
int |
getReadPositionAtReferencePosition(int pos) |
int |
getReadPositionAtReferencePosition(int pos,
boolean returnLastBaseIfDeleted) |
static int |
getReadPositionAtReferencePosition(SAMRecord rec,
int pos,
boolean returnLastBaseIfDeleted) |
java.lang.String |
getReadString() |
boolean |
getReadUnmappedFlag()
the query sequence itself is unmapped.
|
java.lang.Integer |
getReferenceIndex()
Returns the reference index for this record.
|
java.lang.String |
getReferenceName() |
int |
getReferencePositionAtReadPosition(int offset) |
static int |
getReferencePositionAtReadPosition(SAMRecord rec,
int offset) |
java.util.Set<SAMFlag> |
getSAMFlags()
shortcut to
|
java.lang.String |
getSAMString()
Returns the record in the SAM line-based text format.
|
boolean |
getSecondOfPairFlag()
the read is the second read in a pair.
|
java.lang.Short |
getShortAttribute(java.lang.String tag)
Get the tag value and attempt to coerce it into the requested type.
|
byte[] |
getSignedByteArrayAttribute(java.lang.String tag)
Will work for signed byte array or old-style hex array
|
int[] |
getSignedIntArrayAttribute(java.lang.String tag) |
short[] |
getSignedShortArrayAttribute(java.lang.String tag) |
int |
getStart()
an alias of {@link #getAlignmentStart()
|
java.lang.String |
getStringAttribute(java.lang.String tag) |
boolean |
getSupplementaryAlignmentFlag()
the alignment is supplementary (TODO: further explanation?).
|
java.lang.Object |
getTransientAttribute(java.lang.Object key)
Fetches the value of a transient attribute on the SAMRecord, of null if not set.
|
int |
getUnclippedEnd() |
int |
getUnclippedStart() |
byte[] |
getUnsignedByteArrayAttribute(java.lang.String tag) |
int[] |
getUnsignedIntArrayAttribute(java.lang.String tag) |
java.lang.Long |
getUnsignedIntegerAttribute(short tag)
A convenience method that will return a valid unsigned integer as a Long,
or fail with an exception if the tag value is invalid.
|
java.lang.Long |
getUnsignedIntegerAttribute(java.lang.String tag)
A convenience method that will return a valid unsigned integer as a Long,
or fail with an exception if the tag value is invalid.
|
short[] |
getUnsignedShortArrayAttribute(java.lang.String tag) |
ValidationStringency |
getValidationStringency() |
byte[] |
getVariableBinaryRepresentation()
If this record has a valid binary representation of the variable-length portion of a binary record stored,
return that byte array, otherwise return null.
|
int |
hashCode() |
protected void |
initializeCigar(Cigar cigar)
For setting the Cigar string when BAMRecord has decoded it.
|
protected static boolean |
isAllowedAttributeValue(java.lang.Object value)
Deprecated.
The attribute type and value checks have been moved directly into
SAMBinaryTagAndValue . |
boolean |
isSecondaryOrSupplementary()
Tests if this record is either a secondary and/or supplementary alignment;
equivalent to
(getNotPrimaryAlignmentFlag() || getSupplementaryAlignmentFlag()) . |
boolean |
isUnsignedArrayAttribute(java.lang.String tag) |
java.util.List<SAMValidationError> |
isValid()
Perform various validations of SAMRecord.
|
java.util.List<SAMValidationError> |
isValid(boolean firstOnly)
Perform various validations of SAMRecord.
|
java.lang.Object |
removeTransientAttribute(java.lang.Object key)
Removes a transient attribute if it is stored, and returns the stored value.
|
protected static java.lang.Integer |
resolveIndexFromName(java.lang.String referenceName,
SAMFileHeader header,
boolean strict)
Static method that resolves and returns the reference index corresponding to a given reference name.
|
protected static java.lang.String |
resolveNameFromIndex(int referenceIndex,
SAMFileHeader header)
Static method that resolves and returns the reference name corresponding to a given reference index.
|
void |
reverseComplement()
Reverse-complement bases and reverse quality scores along with known optional attributes that
need the same treatment.
|
void |
reverseComplement(boolean inplace)
Reverse-complement bases and reverse quality scores along with known optional attributes that
need the same treatment.
|
void |
reverseComplement(java.util.Collection<java.lang.String> tagsToRevcomp,
java.util.Collection<java.lang.String> tagsToReverse,
boolean inplace)
Reverse complement bases and reverse quality scores.
|
void |
setAlignmentStart(int value) |
protected void |
setAttribute(short tag,
java.lang.Object value) |
protected void |
setAttribute(short tag,
java.lang.Object value,
boolean isUnsignedArray) |
void |
setAttribute(java.lang.String tag,
java.lang.Object value)
Set a named attribute onto the SAMRecord.
|
protected void |
setAttributes(SAMBinaryTagAndValue attributes)
Replace any existing attributes with the given linked item.
|
void |
setBaseQualities(byte[] value) |
void |
setBaseQualityString(java.lang.String value) |
void |
setCigar(Cigar cigar) |
void |
setCigarString(java.lang.String value) |
void |
setDuplicateReadFlag(boolean flag)
the read is either a PCR duplicate or an optical duplicate.
|
protected void |
setFileSource(SAMFileSource fileSource)
Sets a marker providing the source reader for this file and the position in the file from which the read originated.
|
void |
setFirstOfPairFlag(boolean flag)
the read is the first read in a pair.
|
void |
setFlags(int value) |
void |
setHeader(SAMFileHeader header)
Sets the SAMFileHeader for this record.
|
void |
setHeaderStrict(SAMFileHeader header)
Establishes the SAMFileHeader for this record and forces resolution of the record's reference and mate reference
names against the header using the sequence dictionary in the new header.
|
void |
setInferredInsertSize(int inferredInsertSize) |
void |
setMappingQuality(int value) |
void |
setMateAlignmentStart(int mateAlignmentStart) |
void |
setMateNegativeStrandFlag(boolean flag)
strand of the mate (false for forward; true for reverse strand).
|
void |
setMateReferenceIndex(int mateReferenceIndex)
Updates the mate reference index.
|
void |
setMateReferenceName(java.lang.String mateReferenceName)
Sets the mate reference name for this record.
|
void |
setMateUnmappedFlag(boolean flag)
the mate is unmapped.
|
void |
setNotPrimaryAlignmentFlag(boolean flag)
the alignment is not primary (a read having split hits may have multiple primary alignment records).
|
void |
setOriginalBaseQualities(byte[] oq)
Sets the original base quality scores into the "OQ" tag as a String.
|
void |
setProperPairFlag(boolean flag)
the read is mapped in a proper pair (depends on the protocol, normally inferred during alignment).
|
void |
setReadBases(byte[] value) |
void |
setReadFailsVendorQualityCheckFlag(boolean flag)
the read fails platform/vendor quality checks.
|
void |
setReadName(java.lang.String value) |
void |
setReadNegativeStrandFlag(boolean flag)
strand of the query (false for forward; true for reverse strand).
|
void |
setReadPairedFlag(boolean flag)
the read is paired in sequencing, no matter whether it is mapped in a pair.
|
void |
setReadString(java.lang.String value) |
void |
setReadUmappedFlag(boolean flag)
Deprecated.
|
void |
setReadUnmappedFlag(boolean flag)
the query sequence itself is unmapped.
|
void |
setReferenceIndex(int referenceIndex)
Updates the reference index.
|
void |
setReferenceName(java.lang.String referenceName)
Sets the reference name for this record.
|
void |
setSecondOfPairFlag(boolean flag)
the read is the second read in a pair.
|
void |
setSupplementaryAlignmentFlag(boolean flag)
the alignment is supplementary (TODO: further explanation?).
|
java.lang.Object |
setTransientAttribute(java.lang.Object key,
java.lang.Object value)
Sets the value of a transient attribute, and returns the previous value if defined.
|
void |
setUnsignedArrayAttribute(java.lang.String tag,
java.lang.Object value)
Because Java does not support unsigned integer types, we think it is a bad idea to encode them in SAM
files.
|
void |
setValidationStringency(ValidationStringency validationStringency)
Control validation of lazily-decoded elements.
|
java.lang.String |
toString()
Simple toString() that gives a little bit of useful info about the read.
|
java.util.List<SAMValidationError> |
validateCigar(long recordNumber)
Run all validations of CIGAR.
|
public static final long serialVersionUID
public static final int UNKNOWN_MAPPING_QUALITY
public static final int NO_MAPPING_QUALITY
public static final java.lang.String NO_ALIGNMENT_REFERENCE_NAME
public static final int NO_ALIGNMENT_REFERENCE_INDEX
public static final java.lang.String NO_ALIGNMENT_CIGAR
public static final int NO_ALIGNMENT_START
public static final byte[] NULL_SEQUENCE
public static final java.lang.String NULL_SEQUENCE_STRING
public static final byte[] NULL_QUALS
public static final java.lang.String NULL_QUALS_STRING
public static final int MAX_INSERT_SIZE
public static java.util.List<java.lang.String> TAGS_TO_REVERSE_COMPLEMENT
public static java.util.List<java.lang.String> TAGS_TO_REVERSE
protected java.lang.Integer mReferenceIndex
protected java.lang.Integer mMateReferenceIndex
public SAMRecord(SAMFileHeader header)
public java.lang.String getReadName()
public int getReadNameLength()
public void setReadName(java.lang.String value)
public java.lang.String getReadString()
public void setReadString(java.lang.String value)
public byte[] getReadBases()
public void setReadBases(byte[] value)
public int getReadLength()
public java.lang.String getBaseQualityString()
public void setBaseQualityString(java.lang.String value)
public byte[] getBaseQualities()
public void setBaseQualities(byte[] value)
public byte[] getOriginalBaseQualities()
public void setOriginalBaseQualities(byte[] oq)
public java.lang.String getReferenceName()
public void setReferenceName(java.lang.String referenceName)
referenceName
- - must not be nulljava.lang.IllegalArgumentException
- if referenceName
is nullpublic java.lang.Integer getReferenceIndex()
java.lang.IllegalStateException
- if the reference index must be resolved but cannot be because the SAMFileHeader
for the record is null.public void setReferenceIndex(int referenceIndex)
referenceIndex
- Must either equal NO_ALIGNMENT_REFERENCE_INDEX (-1) indicating no reference, or the
record must have a SAMFileHeader and the index must exist in the associated sequence
dictionary.java.lang.IllegalStateException
- if referenceIndex
is not equal to NO_ALIGNMENT_REFERENCE_INDEX and the
SAMFileHeader is null for this recordjava.lang.IllegalArgumentException
- if referenceIndex
is not found in the sequence dictionary in the header
for this record.public java.lang.String getMateReferenceName()
public void setMateReferenceName(java.lang.String mateReferenceName)
mateReferenceName
- - must not be nulljava.lang.IllegalArgumentException
- if mateReferenceName
is nullpublic java.lang.Integer getMateReferenceIndex()
java.lang.IllegalStateException
- if the mate reference index must be resolved but cannot be because the
SAMFileHeader for the record is null.public void setMateReferenceIndex(int mateReferenceIndex)
mateReferenceIndex
- Must either equal NO_ALIGNMENT_REFERENCE_INDEX (-1) indicating no reference, or the
record must have a SAMFileHeader and the index must exist in the associated sequence
dictionary.java.lang.IllegalStateException
- if the SAMFileHeader is null for this recordjava.lang.IllegalArgumentException
- if the mate reference index is not found in the sequence dictionary in the header for this record.protected static java.lang.Integer resolveIndexFromName(java.lang.String referenceName, SAMFileHeader header, boolean strict)
referenceName
- If referenceName
is NO_ALIGNMENT_REFERENCE_NAME, the value NO_ALIGNMENT_REFERENCE_INDEX
is returned directly. Otherwise referenceName
must be looked up in the header's sequence
dictionary.header
- SAMFileHeader to use when resolving referenceName
to an index. Must be non null if the
referenceName
is not NO_ALIGNMENT_REFERENCE_NAME.strict
- if true, throws if referenceName
does not appear in the header's sequence dictionaryjava.lang.IllegalStateException
- if referenceName
is not equal to NO_ALIGNMENT_REFERENCE_NAME and the header is nulljava.lang.IllegalArgumentException
- if strict is true and the name does not appear in header's sequence dictionary.
Does not mutate the SAMRecord.protected static java.lang.String resolveNameFromIndex(int referenceIndex, SAMFileHeader header)
referenceIndex
- If referenceIndex
is NO_ALIGNMENT_REFERENCE_INDEX, the value NO_ALIGNMENT_REFERENCE_NAME
is returned directly. Otherwise referenceIndex
must be looked up in the header's sequence
dictionary.header
- SAMFileHeader to use when resolving referenceIndex
to a name. Must be non null unless the
the referenceIndex
is NO_ALIGNMENT_REFERENCE_INDEX.java.lang.IllegalStateException
- if referenceIndex
is not equal to NO_ALIGNMENT_REFERENCE_NAME and the header
is nulljava.lang.IllegalArgumentException
- if referenceIndex
does not appear in header's sequence dictionary.
Does not mutate the SAMRecord.public int getAlignmentStart()
public void setAlignmentStart(int value)
value
- 1-based inclusive leftmost position of the clipped sequence, or 0 if there is no position.public int getAlignmentEnd()
public int getUnclippedStart()
public int getUnclippedEnd()
public int getReferencePositionAtReadPosition(int offset)
offset
- 1-based location within the unclipped sequence or 0 if there is no position.
Non static version of the static function with the same name.public static int getReferencePositionAtReadPosition(SAMRecord rec, int offset)
rec
- record to useoffset
- 1-based location within the unclipped sequencepublic int getReadPositionAtReferencePosition(int pos)
pos
- 1-based reference position
return the offsetpublic int getReadPositionAtReferencePosition(int pos, boolean returnLastBaseIfDeleted)
pos
- 1-based reference positionreturnLastBaseIfDeleted
- if positive, and reference position matches a deleted base in the read, function will
return the offsetpublic static int getReadPositionAtReferencePosition(SAMRecord rec, int pos, boolean returnLastBaseIfDeleted)
rec
- record to usepos
- 1-based reference positionreturnLastBaseIfDeleted
- if positive, and reference position matches a deleted base in the read, function will
return the offsetpublic int getMateAlignmentStart()
public void setMateAlignmentStart(int mateAlignmentStart)
public int getInferredInsertSize()
public void setInferredInsertSize(int inferredInsertSize)
public int getMappingQuality()
public void setMappingQuality(int value)
public java.lang.String getCigarString()
public void setCigarString(java.lang.String value)
public Cigar getCigar()
public int getCigarLength()
public void setCigar(Cigar cigar)
protected void initializeCigar(Cigar cigar)
public SAMReadGroupRecord getReadGroup()
java.lang.ClassCastException
- if RG tag does not have a String value.public int getFlags()
public void setFlags(int value)
public boolean getReadPairedFlag()
public boolean getProperPairFlag()
public boolean getReadUnmappedFlag()
public boolean getMateUnmappedFlag()
public boolean getReadNegativeStrandFlag()
public boolean getMateNegativeStrandFlag()
public boolean getFirstOfPairFlag()
public boolean getSecondOfPairFlag()
public boolean getNotPrimaryAlignmentFlag()
public boolean getSupplementaryAlignmentFlag()
public boolean getReadFailsVendorQualityCheckFlag()
public boolean getDuplicateReadFlag()
public void setReadPairedFlag(boolean flag)
public void setProperPairFlag(boolean flag)
@Deprecated public void setReadUmappedFlag(boolean flag)
setReadUnmappedFlag(boolean)
instead.public void setReadUnmappedFlag(boolean flag)
public void setMateUnmappedFlag(boolean flag)
public void setReadNegativeStrandFlag(boolean flag)
public void setMateNegativeStrandFlag(boolean flag)
public void setFirstOfPairFlag(boolean flag)
public void setSecondOfPairFlag(boolean flag)
public void setNotPrimaryAlignmentFlag(boolean flag)
public void setSupplementaryAlignmentFlag(boolean flag)
public void setReadFailsVendorQualityCheckFlag(boolean flag)
public void setDuplicateReadFlag(boolean flag)
public boolean isSecondaryOrSupplementary()
(getNotPrimaryAlignmentFlag() || getSupplementaryAlignmentFlag())
.public ValidationStringency getValidationStringency()
public void setValidationStringency(ValidationStringency validationStringency)
public java.lang.Object getAttribute(java.lang.String tag)
tag
- Two-character tag name.public java.lang.Integer getIntegerAttribute(java.lang.String tag)
tag
- The requested tag.java.lang.RuntimeException
- If the value is not an integer type, or will not fit in a signed Integer.public java.lang.Long getUnsignedIntegerAttribute(java.lang.String tag) throws SAMException
tag
- Two-character tag name.{@link
- htsjdk.samtools.SAMException} if the value is out of range for a 32-bit unsigned value, or not a NumberSAMException
public java.lang.Long getUnsignedIntegerAttribute(short tag) throws SAMException
tag
- Binary representation of a 2-char String tag as created by SAMTagUtil.{@link
- htsjdk.samtools.SAMException} if the value is out of range for a 32-bit unsigned value, or not a NumberSAMException
public java.lang.Short getShortAttribute(java.lang.String tag)
tag
- The requested tag.java.lang.RuntimeException
- If the value is not an integer type, or will not fit in a Short.public java.lang.Byte getByteAttribute(java.lang.String tag)
tag
- The requested tag.java.lang.RuntimeException
- If the value is not an integer type, or will not fit in a Byte.public java.lang.String getStringAttribute(java.lang.String tag)
public java.lang.Character getCharacterAttribute(java.lang.String tag)
public java.lang.Float getFloatAttribute(java.lang.String tag)
public byte[] getByteArrayAttribute(java.lang.String tag)
public byte[] getUnsignedByteArrayAttribute(java.lang.String tag)
public byte[] getSignedByteArrayAttribute(java.lang.String tag)
public short[] getUnsignedShortArrayAttribute(java.lang.String tag)
public short[] getSignedShortArrayAttribute(java.lang.String tag)
public int[] getUnsignedIntArrayAttribute(java.lang.String tag)
public int[] getSignedIntArrayAttribute(java.lang.String tag)
public float[] getFloatArrayAttribute(java.lang.String tag)
public boolean isUnsignedArrayAttribute(java.lang.String tag)
SAMException
- if the tag is not present.public java.lang.Object getAttribute(short tag)
tag
- Binary representation of a 2-char String tag as created by SAMTagUtil.getAttribute(java.lang.String)
public void setAttribute(java.lang.String tag, java.lang.Object value)
tag
- two-character tag name. See http://samtools.sourceforge.net/SAM1.pdf for standard and user-defined tags.value
- Supported types are String, Char, Integer, Float,
Long (for values that fit into a signed or unsigned 32-bit integer only),
byte[], short[], int[], float[].
If value == null, tag is cleared.
Byte and Short are allowed but discouraged. If written to a SAM file, these will be converted to Integer,
whereas if written to BAM, getAttribute() will return as Byte or Short, respectively.
Long is allowed for values that fit into a signed or unsigned 32-bit integer only, but discouraged.
To set unsigned byte[], unsigned short[] or unsigned int[] (which is discouraged because of poor Java language
support), setUnsignedArrayAttribute() must be used instead of this method.
String values are not validated to ensure that they conform to SAM spec.public void setUnsignedArrayAttribute(java.lang.String tag, java.lang.Object value)
value
- must be one of byte[], short[], int[]protected void setAttribute(short tag, java.lang.Object value)
tag
- Binary representation of a 2-char String tag as created by SAMTagUtil.setAttribute(java.lang.String, java.lang.Object)
@Deprecated protected static boolean isAllowedAttributeValue(java.lang.Object value)
SAMBinaryTagAndValue
.value
- the value to be checkedprotected void setAttribute(short tag, java.lang.Object value, boolean isUnsignedArray)
public void clearAttributes()
protected void setAttributes(SAMBinaryTagAndValue attributes)
protected SAMBinaryTagAndValue getBinaryAttributes()
public java.lang.String getContig()
Locatable
public int getStart()
public int getEnd()
getAlignmentEnd()
public java.util.List<SAMRecord.SAMTagAndValue> getAttributes()
public SAMFileHeader getHeader()
Record comparators (i.e. SAMRecordCoordinateComparator and SAMRecordDuplicateComparator) require records with non-null header values.
A record with null a header may be validated by the isValid method, but the reference and mate reference indices, read group, sequence dictionary, and alignment start will not be fully validated unless a header is present.
SAMTextWriter, BAMFileWriter, and CRAMFileWriter all require records to have a valid header in order to be written. Any record that does not have a header at the time it is added to the writer will be updated to use the header associated with the writer.
public void setHeader(SAMFileHeader header)
NOTE: If the record has a reference or mate reference name, the corresponding reference and mate reference indices are resolved and updated using the sequence dictionary in the new header. setHeader does not throw an exception if either the reference or mate reference name does not appear in the new header's sequence dictionary.
When the SAMFileHeader is set to null, the reference and mate reference indices are cleared. Therefore, calls to the following SAMRecord methods on records with a null header may throw IllegalArgumentExceptions:
Record comparators (i.e. SAMRecordCoordinateComparator and SAMRecordDuplicateComparator) require records with non-null header values.
A record with null a header may be validated by the isValid method, but the reference and mate reference indices, read group, sequence dictionary, and alignment start will not be fully validated unless a header is present.
SAMTextWriter, BAMFileWriter, and CRAMFileWriter all require records to have a valid header in order to be written. Any record that does not have a header at the time it is added to the writer will be updated to use the header associated with the writer.
header
- contains sequence dictionary for this SAMRecordpublic void setHeaderStrict(SAMFileHeader header)
header
- new header for this record. May be null.java.lang.IllegalArgumentException
- if the record has reference or mate reference names that cannot be resolved
to indices using the new header.public byte[] getVariableBinaryRepresentation()
public int getAttributesBinarySize()
@Deprecated public java.lang.String format()
getSAMString()
.protected void eagerDecode()
public java.util.List<AlignmentBlock> getAlignmentBlocks()
public java.util.List<SAMValidationError> validateCigar(long recordNumber)
recordNumber
- For error reporting. -1 if not known.public boolean equals(java.lang.Object o)
equals
in class java.lang.Object
public int hashCode()
hashCode
in class java.lang.Object
public java.util.List<SAMValidationError> isValid()
public java.util.List<SAMValidationError> isValid(boolean firstOnly)
firstOnly
- return only the first error if true, false otherwisepublic SAMFileSource getFileSource()
protected void setFileSource(SAMFileSource fileSource)
fileSource
- source of the given file.public java.lang.Object clone() throws java.lang.CloneNotSupportedException
clone
in class java.lang.Object
java.lang.CloneNotSupportedException
public SAMRecord deepCopy()
public java.lang.String toString()
toString
in class java.lang.Object
public java.lang.String getSAMString()
public java.lang.String getPairedReadName()
public final java.util.Set<SAMFlag> getSAMFlags()
SAMFlag.getFlags( this.getFlags() );
public final java.lang.Object getTransientAttribute(java.lang.Object key)
public final java.lang.Object setTransientAttribute(java.lang.Object key, java.lang.Object value)
public final java.lang.Object removeTransientAttribute(java.lang.Object key)
public void reverseComplement()
reverseComplement(boolean)
.
See TAGS_TO_REVERSE_COMPLEMENT
TAGS_TO_REVERSE
for the default set of tags that are handled.public void reverseComplement(boolean inplace)
TAGS_TO_REVERSE_COMPLEMENT
TAGS_TO_REVERSE
for the default set of tags that are handled.inplace
- Setting this to false will clone all attributes, bases and qualities before changing the values.public void reverseComplement(java.util.Collection<java.lang.String> tagsToRevcomp, java.util.Collection<java.lang.String> tagsToReverse, boolean inplace)