net.maizegenetics.dna.snp.score.HDF5AlleleDepthBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of tassel Show documentation
Show all versions of tassel Show documentation
TASSEL is a software package to evaluate traits associations, evolutionary patterns, and linkage
disequilibrium.
/*
* HDF5AlleleDepthBuilder
*/
package net.maizegenetics.dna.snp.score;
import ch.systemsx.cisd.hdf5.IHDF5Reader;
import ch.systemsx.cisd.hdf5.IHDF5Writer;
import net.maizegenetics.taxa.Taxon;
import net.maizegenetics.util.HDF5Utils;
/**
* Builder to store information on DNA read depths.
*
* @author Terry Casstevens
*/
public class HDF5AlleleDepthBuilder extends AlleleDepthBuilder {
private IHDF5Writer myHDF5Writer;
private final int myNumSites;
private HDF5AlleleDepthBuilder(IHDF5Writer writer, int numSites) {
super(numSites);
myHDF5Writer = writer;
myNumSites = numSites;
}
/**
* AlleleDepthBuilder is created and depths are stored in a HDF5 file.
* setDepth methods are used to set the depths. Finish the building with
* build()
*
* @param writer
* @param numSites
* @return
*/
public static HDF5AlleleDepthBuilder getHDF5NucleotideInstance(IHDF5Writer writer, int numSites) {
return new HDF5AlleleDepthBuilder(writer, numSites);
}
/**
* AlleleDepth is returned for an immutable HDF5 file
*
* @param reader
* @return allele depths
*/
public static AlleleDepth getExistingHDF5Instance(IHDF5Reader reader) {
//TODO is this the right name for this
if (HDF5Utils.doesGenotypeDepthExist(reader) == false) {
return null;
}
return new HDF5AlleleDepth(reader);
}
/**
* Add taxon and set values for all sites and alleles for that taxon. First
* dimension of depths is number of alleles (6 for Nucleotide) and second
* dimension is sites.
*
* @param taxon taxon
* @param depths depth values
*
* @return builder
*/
public HDF5AlleleDepthBuilder addTaxon(Taxon taxon, byte[][] depths) {
if ((depths == null) || (depths.length != 6)) {
throw new IllegalStateException("AlleleDepthBuilder: addTaxon: Set A, C, G, T, -, + at once");
}
if (depths[0].length != myNumSites) {
throw new IllegalStateException("AlleleDepthBuilder: addTaxon: Number of sites: " + depths[0].length + " should be: " + myNumSites);
}
synchronized (myHDF5Writer) {
HDF5Utils.writeHDF5GenotypesDepth(myHDF5Writer, taxon.getName(), depths);
}
return this;
}
/**
* Add taxon and set values for all sites and alleles for that taxon. First
* dimension of depths is number of alleles (6 for Nucleotide) and second
* dimension is sites.
*
* @param taxon taxon
* @param depths depth values
*
* @return builder
*/
public HDF5AlleleDepthBuilder addTaxon(Taxon taxon, int[][] depths) {
int numAlleles = depths.length;
if ((depths == null) || (numAlleles != 6)) {
throw new IllegalStateException("AlleleDepthBuilder: addTaxon: Set A, C, G, T, -, + at once");
}
if (depths[0].length != myNumSites) {
throw new IllegalStateException("AlleleDepthBuilder: addTaxon: Number of sites: " + depths[0].length + " should be: " + myNumSites);
}
byte[][] result = new byte[numAlleles][myNumSites];
for (int a = 0; a < numAlleles; a++) {
for (int s = 0; s < myNumSites; s++) {
result[a][s] = AlleleDepthUtil.depthIntToByte(depths[a][s]);
}
}
return addTaxon(taxon, result);
}
@Override
public AlleleDepth build() {
IHDF5Reader reader = myHDF5Writer;
myHDF5Writer = null;
return new HDF5AlleleDepth(reader);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy