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

net.maizegenetics.dna.map.TOPMTableReport Maven / Gradle / Ivy

/*
 * TOPMTableReport
 */
package net.maizegenetics.dna.map;

import net.maizegenetics.dna.BaseEncoder;
import net.maizegenetics.dna.snp.NucleotideAlignmentConstants;
import net.maizegenetics.util.TableReport;

/**
 *
 * @author Terry Casstevens
 */
public class TOPMTableReport implements TableReport {

    private static final String[] DEFAULT_COLUMN_HEADINGS = new String[]{"Tag", "Tag Length", "Multi Maps", "Chromosome", "Strand", "Start Pos", "End Pos", "Divergence"};

    private final TOPMInterface myTOPM;
    private final String[] myColumnHeadings;

    public TOPMTableReport(TOPMInterface topm) {
        myTOPM = topm;
        int numVariants = myTOPM.getMaxNumVariants();
        int totalHeadings = DEFAULT_COLUMN_HEADINGS.length + numVariants * 2;
        myColumnHeadings = new String[totalHeadings];
        for (int i = 0; i < DEFAULT_COLUMN_HEADINGS.length; i++) {
            myColumnHeadings[i] = DEFAULT_COLUMN_HEADINGS[i];
        }
        for (int j = DEFAULT_COLUMN_HEADINGS.length; j < totalHeadings; j += 2) {
            myColumnHeadings[j] = "Offset";
            myColumnHeadings[j + 1] = "Variant";
        }
    }

    @Override
    public Object[] getTableColumnNames() {
        return myColumnHeadings;
    }

    @Override
    public String getTableTitle() {
        throw new UnsupportedOperationException("Not supported.");
    }

    @Override
    public int getColumnCount() {
        return myColumnHeadings.length;
    }

    @Override
    public long getRowCount() {
        return myTOPM.getSize();
    }

    @Override
    public long getElementCount() {
        return getColumnCount() * getRowCount();
    }

    @Override
    public Object[] getRow(long row) {
        throw new UnsupportedOperationException("Not supported.");
    }

    @Override
    public Object getValueAt(long rowLong, int col) {
        int row = (int) rowLong;
        switch (col) {
            case 0:
                return BaseEncoder.getSequenceFromLong(myTOPM.getTag(row));
            case 1:
                return myTOPM.getTagLength(row);
            case 2:
                return AbstractTagsOnPhysicalMap.printWithMissing(myTOPM.getMultiMaps(col));
            case 3:
                return AbstractTagsOnPhysicalMap.printWithMissing(myTOPM.getChromosome(row));
            case 4:
                return AbstractTagsOnPhysicalMap.printWithMissing(myTOPM.getStrand(row));
            case 5:
                return AbstractTagsOnPhysicalMap.printWithMissing(myTOPM.getStartPosition(row));
            case 6:
                return AbstractTagsOnPhysicalMap.printWithMissing(myTOPM.getEndPosition(row));
            case 7:
                return AbstractTagsOnPhysicalMap.printWithMissing(myTOPM.getDivergence(row));
            default:
                int varIndex = col - 8;
                if (varIndex % 2 == 0) {
                    return AbstractTagsOnPhysicalMap.printWithMissing(myTOPM.getVariantPosOff(row, varIndex / 2));
                } else {
                    byte vd = myTOPM.getVariantDef(row, varIndex / 2);
                    if (vd == TOPMInterface.BYTE_MISSING) {
                        return AbstractTagsOnPhysicalMap.printWithMissing(vd);
                    } else {
                        return NucleotideAlignmentConstants.getHaplotypeNucleotide(vd);
                    }
                }
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy