In the new sharding system, if no read group is present, hallucinate one. Added
for test compatibility, but not sure whether we still need this feature. TODO: Poll the group about this feature. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@2949 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
a7fe07c404
commit
9e107513d0
|
|
@ -305,8 +305,8 @@
|
|||
<jvmarg value="-javaagent:${build.dir}/TestAgent.jar"/>
|
||||
<formatter type="${testOutput}" usefile="${usefile}" />
|
||||
<classpath>
|
||||
<path refid="runtime.dependencies"/>
|
||||
<pathelement location="build"/>
|
||||
<path refid="runtime.dependencies"/>
|
||||
<pathelement location="${test.classes}"/>
|
||||
<pathelement location="lib/junit-4.4.jar"/>
|
||||
</classpath>
|
||||
|
|
|
|||
|
|
@ -415,6 +415,20 @@ public class BlockDrivenSAMDataSource extends SAMDataSource {
|
|||
for(File readsFile: sourceInfo.getReadsFiles()) {
|
||||
SAMFileReader2 reader = new SAMFileReader2(readsFile,true);
|
||||
reader.setValidationStringency(sourceInfo.getValidationStringency());
|
||||
|
||||
// If no read group is present, hallucinate one.
|
||||
// TODO: Straw poll to see whether this is really required.
|
||||
final SAMFileHeader header = reader.getFileHeader();
|
||||
logger.debug(String.format("Sort order is: " + header.getSortOrder()));
|
||||
|
||||
if (reader.getFileHeader().getReadGroups().size() < 1) {
|
||||
SAMReadGroupRecord rec = new SAMReadGroupRecord(readsFile.getName());
|
||||
rec.setLibrary(readsFile.getName());
|
||||
rec.setSample(readsFile.getName());
|
||||
|
||||
reader.getFileHeader().addReadGroup(rec);
|
||||
}
|
||||
|
||||
readers.put(new SAMReaderID(readsFile),reader);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -415,7 +415,7 @@ public class IndexDrivenSAMDataSource extends SAMDataSource {
|
|||
private StingSAMIterator createIterator( DataStreamSegment segment ) {
|
||||
StingSAMIterator iterator = resourcePool.iterator(segment);
|
||||
StingSAMIterator malformedWrappedIterator = new MalformedSAMFilteringIterator( getHeader(), iterator, violations );
|
||||
StingSAMIterator readWrappingIterator = new ReadWrappingIterator(malformedWrappedIterator);
|
||||
StingSAMIterator readWrappingIterator = new ReadFormattingIterator(malformedWrappedIterator);
|
||||
return readWrappingIterator;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ import org.broadinstitute.sting.utils.sam.SAMReadViolationHistogram;
|
|||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
|
@ -182,7 +181,7 @@ public abstract class SAMDataSource implements SimpleDataSource {
|
|||
Boolean noValidationOfReadOrder,
|
||||
Collection<SamRecordFilter> supplementalFilters) {
|
||||
wrappedIterator = new MalformedSAMFilteringIterator(getHeader(),wrappedIterator,violations );
|
||||
wrappedIterator = new ReadWrappingIterator(wrappedIterator);
|
||||
wrappedIterator = new ReadFormattingIterator(wrappedIterator);
|
||||
|
||||
// NOTE: this (and other filtering) should be done before on-the-fly sorting
|
||||
// as there is no reason to sort something that we will end of throwing away
|
||||
|
|
|
|||
|
|
@ -1,17 +1,27 @@
|
|||
package org.broadinstitute.sting.gatk.iterators;
|
||||
|
||||
import net.sf.samtools.SAMRecord;
|
||||
import net.sf.samtools.SAMTag;
|
||||
import net.sf.samtools.SAMReadGroupRecord;
|
||||
import org.broadinstitute.sting.gatk.Reads;
|
||||
import org.broadinstitute.sting.utils.sam.GATKSAMRecord;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* An iterator which wraps each SAMRecord inside a wrapper class, bringing new functionality to the read while
|
||||
* presenting the original SAMRecord interface.
|
||||
* An iterator which does post-processing of a read, including potentially wrapping
|
||||
* the read in something with a compatible interface or replacing the read entirely.
|
||||
*
|
||||
* @author mhanna
|
||||
* @version 0.1
|
||||
*/
|
||||
public class ReadWrappingIterator implements StingSAMIterator {
|
||||
public class ReadFormattingIterator implements StingSAMIterator {
|
||||
/**
|
||||
* Logger.
|
||||
*/
|
||||
protected static Logger logger = Logger.getLogger(ReadFormattingIterator.class);
|
||||
|
||||
/**
|
||||
* Iterator to which to pass
|
||||
*/
|
||||
|
|
@ -21,7 +31,7 @@ public class ReadWrappingIterator implements StingSAMIterator {
|
|||
* Decorate the given iterator inside a ReadWrappingIterator.
|
||||
* @param wrappedIterator iterator
|
||||
*/
|
||||
public ReadWrappingIterator(StingSAMIterator wrappedIterator) {
|
||||
public ReadFormattingIterator(StingSAMIterator wrappedIterator) {
|
||||
this.wrappedIterator = wrappedIterator;
|
||||
}
|
||||
|
||||
|
|
@ -65,7 +75,21 @@ public class ReadWrappingIterator implements StingSAMIterator {
|
|||
* no next exists.
|
||||
*/
|
||||
public SAMRecord next() {
|
||||
return new GATKSAMRecord(wrappedIterator.next());
|
||||
SAMRecord read = wrappedIterator.next();
|
||||
|
||||
// if we don't have a read group, set one.
|
||||
// TODO: Straw poll to see whether this is really required.
|
||||
if (read.getAttribute(SAMTag.RG.toString()) == null && read.getReader() != null) {
|
||||
List<SAMReadGroupRecord> readGroups = read.getReader().getFileHeader().getReadGroups();
|
||||
if (readGroups.size() == 1) {
|
||||
read.setAttribute(SAMTag.RG.toString(), readGroups.get(0).getReadGroupId());
|
||||
read.setAttribute(SAMTag.SM.toString(), readGroups.get(0).getReadGroupId());
|
||||
} else {
|
||||
logger.warn("Unable to set read group of ungrouped read: unable to pick default group, there are " + readGroups.size() + " possible.");
|
||||
}
|
||||
}
|
||||
|
||||
return new GATKSAMRecord(read);
|
||||
}
|
||||
|
||||
/**
|
||||
Loading…
Reference in New Issue