package picard.illumina.parser; /** * Illumina's TileMetricsOut.bin file codes various metrics, both concrete (all density id's are code 100) or as a base code * (e.g. phasing values are computed from a base of 200). * * @author jgentry */ public enum IlluminaMetricsCode { DENSITY_ID(100), CLUSTER_ID(102), PHASING_BASE(200), PREPHASING_BASE(201); private final int metricsCode; IlluminaMetricsCode(final int metricsCode) { this.metricsCode = metricsCode; } /** * Phasing codes are between 200 and 299 (inclusive). Phasing codes are defined as being * (200 + ((N - 1) * 2)) for (a 0-based) read descriptor N (i.e., 200, 202, 204, etc.) Prephasing codes are defined * as being (201 + ((N - 1) * 2)) for read descriptor N (i.e., 201, 203, 205, etc.). So for a 101T8B101T read * structure, there will be phasing codes of 200, 202 and 204 and prephasing codes of 201, 203, 205. */ public static int getPhasingCode(final int readDescriptorIndex, final IlluminaMetricsCode phasingType) { if (!isPhasing(phasingType)) { throw new IllegalArgumentException("phasingType must be PHASING_BASE or PREPHASING_BASE"); } return (phasingType.getMetricsCode() + (readDescriptorIndex * 2)); } public static boolean isPhasing(final IlluminaMetricsCode metricsCode) { return (metricsCode.equals(PHASING_BASE) || metricsCode.equals(PREPHASING_BASE)); } public int getMetricsCode() { return metricsCode; } }