package picard.illumina.parser.readers; import htsjdk.samtools.util.CloseableIterator; import picard.util.BasicInputParser; import java.io.File; /** * Reads a single barcode file line by line and returns the barcode if there was a match or NULL otherwise. * * Barcode.txt file Format (consists of tab delimited columns, 1 record per row) * sequence_read Matched(Y/N) BarcodeSequenceMatched * * sequence read - the actual bases at barcode position * Matched(y/n) - Y or N indicating if there was a barcode match * BarcodeSequenceMatched - matched barcode sequence (empty if read did not match one of the barcodes). */ public class BarcodeFileReader implements CloseableIterator<String> { private static final int Y_OR_N_COLUMN = 1; private static final int BARCODE_COLUMN = 2; private final BasicInputParser textIterator; public BarcodeFileReader(final File barcodeFile) { this.textIterator = new BasicInputParser(false, barcodeFile); } @Override public String next() { final String [] fields = textIterator.next(); final String barcode; if (fields[Y_OR_N_COLUMN].equals("Y")) { barcode = fields[BARCODE_COLUMN]; } else { barcode = null; } return barcode; } @Override public boolean hasNext() { return textIterator.hasNext(); } public void remove() { throw new UnsupportedOperationException("Remove is not supported by " + BarcodeFileReader.class.getName()); } public void close() { textIterator.close(); } }