public void write(final FastqRecord rec) { writer.print(FastqConstants.SEQUENCE_HEADER); writer.println(rec.getReadHeader()); writer.println(rec.getReadString()); writer.print(FastqConstants.QUALITY_HEADER); writer.println(rec.getBaseQualityHeader() == null ? "" : rec.getBaseQualityHeader()); writer.println(rec.getBaseQualityString()); if (writer.checkError()) { throw new SAMException("Error in writing fastq file " + path); } }
@Override public Read to(FastqRecord obj) { return new Read(obj.getReadHeader(), obj.getReadString(), obj.getBaseQualityString()); }
@Override public Read forward(FastqRecord obj) { return new Read(obj.getReadHeader(), obj.getReadString(), obj.getBaseQualityString()); }
/** Creates a simple SAM file from a single fastq file. */ protected int doUnpaired(final FastqReader freader, final SAMFileWriter writer) { int readCount = 0; final ProgressLogger progress = new ProgressLogger(LOG); for ( ; freader.hasNext() ; readCount++) { final FastqRecord frec = freader.next(); final SAMRecord srec = createSamRecord(writer.getFileHeader(), SequenceUtil.getSamReadNameFromFastqHeader(frec.getReadHeader()) , frec, false) ; srec.setReadPairedFlag(false); writer.addAlignment(srec); progress.record(srec); } return readCount; }
/** Creates a simple SAM file from a single fastq file. */ protected int doUnpaired(final FastqReader freader, final SAMFileWriter writer) { int readCount = 0; final ProgressLogger progress = new ProgressLogger(LOG); for ( ; freader.hasNext() ; readCount++) { final FastqRecord frec = freader.next(); final SAMRecord srec = createSamRecord(writer.getFileHeader(), SequenceUtil.getSamReadNameFromFastqHeader(frec.getReadHeader()) , frec, false) ; srec.setReadPairedFlag(false); writer.addAlignment(srec); progress.record(srec); } return readCount; }
/** More complicated method that takes two fastq files and builds pairing information in the SAM. */ protected int doPaired(final FastqReader freader1, final FastqReader freader2, final SAMFileWriter writer) { int readCount = 0; final ProgressLogger progress = new ProgressLogger(LOG); for ( ; freader1.hasNext() && freader2.hasNext() ; readCount++) { final FastqRecord frec1 = freader1.next(); final FastqRecord frec2 = freader2.next(); final String frec1Name = SequenceUtil.getSamReadNameFromFastqHeader(frec1.getReadHeader()); final String frec2Name = SequenceUtil.getSamReadNameFromFastqHeader(frec2.getReadHeader()); final String baseName = getBaseName(frec1Name, frec2Name, freader1, freader2); final SAMRecord srec1 = createSamRecord(writer.getFileHeader(), baseName, frec1, true) ; srec1.setFirstOfPairFlag(true); srec1.setSecondOfPairFlag(false); writer.addAlignment(srec1); progress.record(srec1); final SAMRecord srec2 = createSamRecord(writer.getFileHeader(), baseName, frec2, true) ; srec2.setFirstOfPairFlag(false); srec2.setSecondOfPairFlag(true); writer.addAlignment(srec2); progress.record(srec2); } if (freader1.hasNext() || freader2.hasNext()) { throw new PicardException("Input paired fastq files must be the same length"); } return readCount; }
/** More complicated method that takes two fastq files and builds pairing information in the SAM. */ protected int doPaired(final FastqReader freader1, final FastqReader freader2, final SAMFileWriter writer) { int readCount = 0; final ProgressLogger progress = new ProgressLogger(LOG); for ( ; freader1.hasNext() && freader2.hasNext() ; readCount++) { final FastqRecord frec1 = freader1.next(); final FastqRecord frec2 = freader2.next(); final String frec1Name = SequenceUtil.getSamReadNameFromFastqHeader(frec1.getReadHeader()); final String frec2Name = SequenceUtil.getSamReadNameFromFastqHeader(frec2.getReadHeader()); final String baseName = getBaseName(frec1Name, frec2Name, freader1, freader2); final SAMRecord srec1 = createSamRecord(writer.getFileHeader(), baseName, frec1, true) ; srec1.setFirstOfPairFlag(true); srec1.setSecondOfPairFlag(false); writer.addAlignment(srec1); progress.record(srec1); final SAMRecord srec2 = createSamRecord(writer.getFileHeader(), baseName, frec2, true) ; srec2.setFirstOfPairFlag(false); srec2.setSecondOfPairFlag(true); writer.addAlignment(srec2); progress.record(srec2); } if (freader1.hasNext() || freader2.hasNext()) { throw new PicardException("Input paired fastq files must be the same length"); } return readCount; }
private SAMRecord createSamRecord(final SAMFileHeader header, final String baseName, final FastqRecord frec, final boolean paired) { final SAMRecord srec = new SAMRecord(header); srec.setReadName(baseName); srec.setReadString(frec.getReadString()); srec.setReadUnmappedFlag(true); srec.setAttribute(ReservedTagConstants.READ_GROUP_ID, READ_GROUP_NAME); final byte[] quals = StringUtil.stringToBytes(frec.getBaseQualityString()); convertQuality(quals, QUALITY_FORMAT); for (final byte qual : quals) { final int uQual = qual & 0xff; if (uQual < MIN_Q || uQual > MAX_Q) { throw new PicardException("Base quality " + uQual + " is not in the range " + MIN_Q + ".." + MAX_Q + " for read " + frec.getReadHeader()); } } srec.setBaseQualities(quals); if (paired) { srec.setReadPairedFlag(true); srec.setMateUnmappedFlag(true); } return srec ; }
private SAMRecord createSamRecord(final SAMFileHeader header, final String baseName, final FastqRecord frec, final boolean paired) { final SAMRecord srec = new SAMRecord(header); srec.setReadName(baseName); srec.setReadString(frec.getReadString()); srec.setReadUnmappedFlag(true); srec.setAttribute(ReservedTagConstants.READ_GROUP_ID, READ_GROUP_NAME); final byte[] quals = StringUtil.stringToBytes(frec.getBaseQualityString()); convertQuality(quals, QUALITY_FORMAT); for (final byte qual : quals) { final int uQual = qual & 0xff; if (uQual < MIN_Q || uQual > MAX_Q) { throw new PicardException("Base quality " + uQual + " is not in the range " + MIN_Q + ".." + MAX_Q + " for read " + frec.getReadHeader()); } } srec.setBaseQualities(quals); if (paired) { srec.setReadPairedFlag(true); srec.setMateUnmappedFlag(true); } return srec ; }