I will admit I have little understanding of exactly how read groups work with regards to tags within the file instead of just the header. Here is my problem:
1. I originally processed all my files with @RG tags for ID and SM, where ID was always 1 (the problem) and SM was the sample name (which is fine).
2. A downstream application I use has problems with the ID:1 tag, and I need it to be the sample name (I think, the downstream application has little documentation, but on other files where I did this originally it worked).
4. Using samtools view -H file > file.txt I edited each header file to have ID: sample id then used samtools reheader.
3. Before using the downstream application, I need to merge my files and I did this:
/home/jdk1.7.0_55/bin/java -Xmx2g -jar ../bin/picard-tools-1/picard-tools-1.89/MergeSamFiles.jar
followed by a list of I= and O=
4. The error:
Exception in thread "main" net.sf.samtools.SAMFormatException: SAM validation error: ERROR: Record 1, Read name M01533:70:000000000-A5W2F:1:2113:28047:12326, RG ID on SAMRecord not found in header: 1
at net.sf.samtools.SAMUtils.processValidationErrors(SAMUtils.java:448)
at net.sf.samtools.BAMFileReader$BAMFileIterator.advance(BAMFileReader.java:541)
at net.sf.samtools.BAMFileReader$BAMFileIterator.<init>(BAMFileReader.java:500)
at net.sf.samtools.BAMFileReader$BAMFileIterator.<init>(BAMFileReader.java:488)
at net.sf.samtools.BAMFileReader.getIterator(BAMFileReader.java:290)
at net.sf.samtools.SAMFileReader.iterator(SAMFileReader.java:322)
at net.sf.picard.sam.MergingSamRecordIterator.startIterationIfRequired(MergingSamRecordIterator.java:100)
at net.sf.picard.sam.MergingSamRecordIterator.hasNext(MergingSamRecordIterator.java:115)
at net.sf.picard.sam.MergeSamFiles.doWork(MergeSamFiles.java:147)
at net.sf.picard.cmdline.CommandLineProgram.instanceMain(CommandLineProgram.java:177)
at net.sf.picard.sam.MergeSamFiles.main(MergeSamFiles.java:79)
So, can you not edit @RG tags after the file has been created? The very existence of samtools reheader seems to support that you can.....Is there a way of doing this that does a better job, and actually changes the read tags, assuming some kind of tag on each read is the problem?
1. I originally processed all my files with @RG tags for ID and SM, where ID was always 1 (the problem) and SM was the sample name (which is fine).
2. A downstream application I use has problems with the ID:1 tag, and I need it to be the sample name (I think, the downstream application has little documentation, but on other files where I did this originally it worked).
4. Using samtools view -H file > file.txt I edited each header file to have ID: sample id then used samtools reheader.
3. Before using the downstream application, I need to merge my files and I did this:
/home/jdk1.7.0_55/bin/java -Xmx2g -jar ../bin/picard-tools-1/picard-tools-1.89/MergeSamFiles.jar
followed by a list of I= and O=
4. The error:
Exception in thread "main" net.sf.samtools.SAMFormatException: SAM validation error: ERROR: Record 1, Read name M01533:70:000000000-A5W2F:1:2113:28047:12326, RG ID on SAMRecord not found in header: 1
at net.sf.samtools.SAMUtils.processValidationErrors(SAMUtils.java:448)
at net.sf.samtools.BAMFileReader$BAMFileIterator.advance(BAMFileReader.java:541)
at net.sf.samtools.BAMFileReader$BAMFileIterator.<init>(BAMFileReader.java:500)
at net.sf.samtools.BAMFileReader$BAMFileIterator.<init>(BAMFileReader.java:488)
at net.sf.samtools.BAMFileReader.getIterator(BAMFileReader.java:290)
at net.sf.samtools.SAMFileReader.iterator(SAMFileReader.java:322)
at net.sf.picard.sam.MergingSamRecordIterator.startIterationIfRequired(MergingSamRecordIterator.java:100)
at net.sf.picard.sam.MergingSamRecordIterator.hasNext(MergingSamRecordIterator.java:115)
at net.sf.picard.sam.MergeSamFiles.doWork(MergeSamFiles.java:147)
at net.sf.picard.cmdline.CommandLineProgram.instanceMain(CommandLineProgram.java:177)
at net.sf.picard.sam.MergeSamFiles.main(MergeSamFiles.java:79)
So, can you not edit @RG tags after the file has been created? The very existence of samtools reheader seems to support that you can.....Is there a way of doing this that does a better job, and actually changes the read tags, assuming some kind of tag on each read is the problem?
Comment