All Downloads are FREE. Search and download functionalities are using the official Maven repository.

picard.illumina.parser.BaseIlluminaDataProvider Maven / Gradle / Ivy

Go to download

A set of command line tools (in Java) for manipulating high-throughput sequencing (HTS) data and formats such as SAM/BAM/CRAM and VCF.

There is a newer version: 3.2.0
Show newest version
package picard.illumina.parser;

import java.util.Iterator;
import java.util.stream.StreamSupport;

/**
 * Parse various formats and versions of Illumina Basecall files, and use them the to populate
 * ClusterData objects.
 */
public abstract class BaseIlluminaDataProvider implements Iterator, Iterable, AutoCloseable {

    protected final int lane;
    /**
     * Calculated once, outputReadTypes describes the type of read data for each ReadData that will be found in output ClusterData objects
     */
    final ReadType[] outputReadTypes;
    /**
     * Number of reads in each ClusterData
     */
    final int numReads;

    public BaseIlluminaDataProvider(final int lane, final OutputMapping outputMapping) {
        numReads = outputMapping.numOutputReads();
        this.lane = lane;
        this.outputReadTypes = StreamSupport.stream(outputMapping.getOutputDescriptors().spliterator(), false)
                .map(rd -> rd.type).toArray(ReadType[]::new);
    }

    @Override
    public Iterator iterator() {
        return this;
    }

    public abstract void close();

    /*
     * Methods for that transfer data from the IlluminaData objects to the current cluster
     */
    protected void addData(final ClusterData clusterData, final PositionalData posData) {
        clusterData.setX(posData.getXCoordinate());
        clusterData.setY(posData.getYCoordinate());
    }

    protected void addData(final ClusterData clusterData, final PfData pfData) {
        clusterData.setPf(pfData.isPf());
    }

    protected void addData(final ClusterData clusterData, final BarcodeData barcodeData) {
        clusterData.setMatchedBarcode(barcodeData.getBarcode());
    }

    protected void addReadData(final ClusterData clusterData, final int numReads, final BaseData baseData) {
        final byte[][] bases = baseData.getBases();
        for (int i = 0; i < numReads; i++) {
            clusterData.getRead(i).setBases(bases[i]);
        }
    }

    protected void addReadData(final ClusterData clusterData, final int numReads, final QualityData qualityData) {
        final byte[][] qualities = qualityData.getQualities();
        for (int i = 0; i < numReads; i++) {
            clusterData.getRead(i).setQualities(qualities[i]);
        }
    }

    protected void addReadData(final ClusterData clusterData, final int numReads, final CbclData cbclData) {
        final byte[][] bases = cbclData.getBases();
        for (int i = 0; i < numReads; i++) {
            clusterData.getRead(i).setBases(bases[i]);
        }
        final byte[][] qualities = cbclData.getQualities();
        for (int i = 0; i < numReads; i++) {
            clusterData.getRead(i).setQualities(qualities[i]);
        }
        clusterData.setPf(cbclData.isPf());
        clusterData.setX(cbclData.getPositionInfo().xQseqCoord);
        clusterData.setY(cbclData.getPositionInfo().yQseqCoord);
    }

    abstract void seekToTile(int seekAfterFirstRead);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy