Added code to make a read group and sample name for BAM files that don't annotate them on reads. The defaults for both are now the filename, but this may be shortened in the future.
The sample name for a read can be retrieved with the command: read.getAttribute(SAMTag.RG.toString()); git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@518 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
45d962e491
commit
bd4cacb832
|
|
@ -3,6 +3,7 @@ package org.broadinstitute.sting.gatk.dataSources.simpleDataSources;
|
|||
import edu.mit.broad.picard.sam.SamFileHeaderMerger;
|
||||
import net.sf.samtools.SAMFileHeader;
|
||||
import net.sf.samtools.SAMFileReader;
|
||||
import net.sf.samtools.SAMReadGroupRecord;
|
||||
import net.sf.samtools.SAMRecord;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.broadinstitute.sting.gatk.iterators.BoundedReadIterator;
|
||||
|
|
@ -253,7 +254,6 @@ public class SAMDataSource implements SimpleDataSource {
|
|||
this.readsAtLastPos = 1;
|
||||
}
|
||||
lastPos = rec.getAlignmentStart();
|
||||
//System.out.print("t" + rec.getAlignmentStart() + " ");
|
||||
++x;
|
||||
} else {
|
||||
// jump contigs
|
||||
|
|
@ -310,6 +310,16 @@ public class SAMDataSource implements SimpleDataSource {
|
|||
List<SAMFileReader> lst = new ArrayList<SAMFileReader>();
|
||||
for (File f : this.samFileList) {
|
||||
SAMFileReader reader = initializeSAMFile(f);
|
||||
|
||||
if (reader.getFileHeader().getReadGroups().size() < 1) {
|
||||
logger.warn("Setting header in reader " + f.getName());
|
||||
SAMReadGroupRecord rec = new SAMReadGroupRecord(f.getName());
|
||||
rec.setLibrary(f.getName());
|
||||
rec.setSample(f.getName());
|
||||
|
||||
reader.getFileHeader().addReadGroup(rec);
|
||||
}
|
||||
|
||||
if (reader == null) {
|
||||
throw new SimpleDataSourceLoadException("SAMDataSource: Unable to load file: " + f);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,7 +128,6 @@ public class MicroManager {
|
|||
walkerInitialized = true;
|
||||
}
|
||||
|
||||
System.err.println(traversalEngine.getSAMHeader().getSequenceDictionary().toString());
|
||||
accumulator = traversalEngine.traverse( walker, shard, referenceProvider, locusProvider, accumulator );
|
||||
readShard.close();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,10 +16,12 @@ import edu.mit.broad.picard.sam.SamFileHeaderMerger;
|
|||
import edu.mit.broad.picard.util.PeekableIterator;
|
||||
import net.sf.samtools.*;
|
||||
import net.sf.samtools.util.CloseableIterator;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.PriorityQueue;
|
||||
|
||||
/**
|
||||
|
|
@ -31,6 +33,7 @@ public class MergingSamRecordIterator2 implements CloseableIterator<SAMRecord>,
|
|||
protected PriorityQueue<ComparableSamRecordIterator> pq = null;
|
||||
protected final SamFileHeaderMerger samHeaderMerger;
|
||||
protected final SAMFileHeader.SortOrder sortOrder;
|
||||
protected static Logger logger = Logger.getLogger(MergingSamRecordIterator2.class);
|
||||
|
||||
protected boolean initialized = false;
|
||||
|
||||
|
|
@ -135,11 +138,20 @@ public class MergingSamRecordIterator2 implements CloseableIterator<SAMRecord>,
|
|||
if (oldProgramGroupId != null) {
|
||||
final String newProgramGroupId = this.samHeaderMerger.getProgramGroupId(iterator.getReader(), oldProgramGroupId);
|
||||
record.setAttribute(SAMTag.PG.toString(), newProgramGroupId);
|
||||
} else {
|
||||
List<SAMReadGroupRecord> readGroups = iterator.getReader().getFileHeader().getReadGroups();
|
||||
if (readGroups.size() == 1) {
|
||||
record.setAttribute(SAMTag.RG.toString(), readGroups.get(0).getReadGroupId());
|
||||
record.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.");
|
||||
}
|
||||
}
|
||||
|
||||
record.setHeader(samHeaderMerger.getMergedHeader());
|
||||
//System.out.printf("NEXT = %s %s %d%n", record.getReadName(), record.getReferenceName(), record.getAlignmentStart());
|
||||
//System.out.printf("PEEK = %s %s %d%n", this.pq.peek().peek().getReadName(), this.pq.peek().peek().getReferenceName(), this.pq.peek().peek().getAlignmentStart());
|
||||
|
||||
return record;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue