package picard.fastq;
import htsjdk.samtools.util.StringUtil;
import picard.illumina.parser.ClusterData;
/**
* A read name encoder conforming to the standard described by Illumina Casava 1.8.
*
* @see <a href="http://biowulf.nih.gov/apps/CASAVA1_8_Changes.pdf">Casava 1.8 update</a>
* @author mccowan
*/
public class Casava18ReadNameEncoder implements ReadNameEncoder {
final static int CONTROL_FIELD_VALUE = 0;
final String runId, instrumentName, flowcellId;
static enum IsFilteredLabel {
Y, N;
static IsFilteredLabel get(final boolean passesFilter) {
return passesFilter ? N : Y;
}
}
public Casava18ReadNameEncoder(final String instrumentName, final String runId, final String flowcellId) {
this.runId = runId;
this.instrumentName = instrumentName;
this.flowcellId = flowcellId;
}
@Override
public String generateReadName(final ClusterData cluster, final Integer pairNumber) {
return String.format(
"%s:%s:%s:%d:%d:%d:%d %s:%s:%d:%s",
instrumentName,
runId,
flowcellId,
cluster.getLane(),
cluster.getTile(),
cluster.getX(),
cluster.getY(),
StringUtil.asEmptyIfNull(pairNumber),
IsFilteredLabel.get(cluster.isPf()),
CONTROL_FIELD_VALUE,
StringUtil.asEmptyIfNull(cluster.getMatchedBarcode())
);
}
}