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

org.broadinstitute.hellbender.tools.spark.pathseq.PSTaxonomyDatabase Maven / Gradle / Ivy

There is a newer version: 4.6.0.0
Show newest version
package org.broadinstitute.hellbender.tools.spark.pathseq;

import com.esotericsoftware.kryo.DefaultSerializer;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;

import java.util.HashMap;
import java.util.Map;

/**
 * Helper class for holding taxonomy data used by ClassifyReads
 */
@DefaultSerializer(PSTaxonomyDatabase.Serializer.class)
public class PSTaxonomyDatabase {
    public final PSTree tree;
    public final Map accessionToTaxId; //Reference contig name to taxonomic ID

    public PSTaxonomyDatabase(final PSTree tree, final Map map) {
        this.tree = tree;
        this.accessionToTaxId = map;
    }

    private PSTaxonomyDatabase(final Kryo kryo, final Input input) {
        final boolean oldReferences = kryo.getReferences();
        kryo.setReferences(false);

        tree = kryo.readObject(input, PSTree.class);
        final int setSize = input.readInt();
        accessionToTaxId = new HashMap<>(setSize);
        for (int i = 0; i < setSize; i++) {
            final String key = input.readString();
            final String value = input.readString();
            accessionToTaxId.put(key, Integer.valueOf(value));
        }

        kryo.setReferences(oldReferences);
    }

    protected void serialize(final Kryo kryo, final Output output) {
        final boolean oldReferences = kryo.getReferences();
        kryo.setReferences(false);

        kryo.writeObject(output, tree);
        output.writeInt(accessionToTaxId.size());
        for (final String key : accessionToTaxId.keySet()) {
            output.writeString(key);
            output.writeString(String.valueOf(accessionToTaxId.get(key)));
        }

        kryo.setReferences(oldReferences);
    }

    public static final class Serializer extends com.esotericsoftware.kryo.Serializer {
        @Override
        public void write(final Kryo kryo, final Output output, final PSTaxonomyDatabase taxonomyDatabase) {
            taxonomyDatabase.serialize(kryo, output);
        }

        @Override
        public PSTaxonomyDatabase read(final Kryo kryo, final Input input,
                           final Class klass) {
            return new PSTaxonomyDatabase(kryo, input);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy