63 lines
1.7 KiB
Java
63 lines
1.7 KiB
Java
|
|
package org.broadinstitute.sting.utils.sam;
|
||
|
|
|
||
|
|
import net.sf.samtools.SAMFileHeader;
|
||
|
|
import net.sf.samtools.SAMFileWriter;
|
||
|
|
import net.sf.samtools.SAMRecord;
|
||
|
|
import org.broadinstitute.sting.gatk.iterators.StingSAMIterator;
|
||
|
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||
|
|
import org.broadinstitute.sting.utils.GenomeLocParser;
|
||
|
|
import org.broadinstitute.sting.utils.exceptions.UserException;
|
||
|
|
|
||
|
|
import java.util.Iterator;
|
||
|
|
import java.util.NoSuchElementException;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* XXX
|
||
|
|
*/
|
||
|
|
public class SimplifyingSAMFileWriter implements SAMFileWriter {
|
||
|
|
final SAMFileWriter dest;
|
||
|
|
|
||
|
|
public SimplifyingSAMFileWriter(final SAMFileWriter finalDestination) {
|
||
|
|
this.dest = finalDestination;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void addAlignment( SAMRecord read ) {
|
||
|
|
if ( keepRead(read) ) {
|
||
|
|
dest.addAlignment(simplifyRead(read));
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Retrieves the header to use when creating the new SAM file.
|
||
|
|
* @return header to use when creating the new SAM file.
|
||
|
|
*/
|
||
|
|
public SAMFileHeader getFileHeader() {
|
||
|
|
return dest.getFileHeader();
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @{inheritDoc}
|
||
|
|
*/
|
||
|
|
public void close() {
|
||
|
|
dest.close();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public static final boolean keepRead(SAMRecord read) {
|
||
|
|
return ! excludeRead(read);
|
||
|
|
}
|
||
|
|
|
||
|
|
public static final boolean excludeRead(SAMRecord read) {
|
||
|
|
return read.getReadUnmappedFlag() || read.getReadFailsVendorQualityCheckFlag() || read.getDuplicateReadFlag() || read.getNotPrimaryAlignmentFlag();
|
||
|
|
}
|
||
|
|
|
||
|
|
public static final SAMRecord simplifyRead(SAMRecord read) {
|
||
|
|
// the only attribute we keep is the RG
|
||
|
|
Object rg = read.getAttribute("RG");
|
||
|
|
read.clearAttributes();
|
||
|
|
read.setAttribute("RG", rg);
|
||
|
|
return read;
|
||
|
|
}
|
||
|
|
}
|