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

net.maizegenetics.analysis.distance.DistanceMatrixRangesPlugin Maven / Gradle / Ivy

/*
 * DistanceMatrixRangesPlugin
 */
package net.maizegenetics.analysis.distance;

import java.awt.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.*;
import net.maizegenetics.dna.snp.GenotypeTable;
import net.maizegenetics.dna.snp.FilterGenotypeTable;
import net.maizegenetics.util.SimpleTableReport;
import net.maizegenetics.util.TableReport;
import net.maizegenetics.plugindef.AbstractPlugin;
import net.maizegenetics.plugindef.DataSet;
import net.maizegenetics.plugindef.Datum;
import net.maizegenetics.plugindef.PluginEvent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 *
 * @author terryc
 */
public class DistanceMatrixRangesPlugin extends AbstractPlugin {

    private static final Logger myLogger = LogManager.getLogger(DistanceMatrixRangesPlugin.class);
    private int[] myPhysicalPositions = null;
    private String myLocus = null;
    private String myTaxon = null;

    public DistanceMatrixRangesPlugin(Frame parentFrame, boolean isInteractive) {
        super(parentFrame, isInteractive);
    }

    public DataSet performFunction(DataSet input) {

        try {

            List alignInList = input.getDataOfType(GenotypeTable.class);
            if (alignInList.size() < 1) {
                String message = "Invalid selection.  Please select sequence alignment.";
                if (isInteractive()) {
                    JOptionPane.showMessageDialog(getParentFrame(), message);
                } else {
                    myLogger.error(message);
                }
                return null;
            }

            List result = new ArrayList();
            Iterator itr = alignInList.iterator();
            while (itr.hasNext()) {
                Datum current = itr.next();
                DataSet tds = processDatum(current);
                result.add(tds);
                if (tds != null) {
                    fireDataSetReturned(new PluginEvent(tds, DistanceMatrixRangesPlugin.class));
                }
            }

            return DataSet.getDataSet(result, this);

        } finally {
            fireProgress(100);
        }

    }

    public DataSet processDatum(Datum input) {

        GenotypeTable aa = (GenotypeTable) input.getData();
        int numTaxa = aa.numberOfTaxa();
        int interestedTaxa = aa.taxa().indexOf(myTaxon);
        Object[][] theData = new Object[numTaxa][myPhysicalPositions.length];
        for (int t = 0; t < numTaxa; t++) {
            theData[t][0] = aa.taxaName(t);
        }
        String[] columnNames = new String[myPhysicalPositions.length];
        columnNames[0] = "Taxa";
        for (int i = 1, n = myPhysicalPositions.length; i < n; i++) {
            GenotypeTable alignment = FilterGenotypeTable.getInstance(aa, myLocus, myPhysicalPositions[i - 1], myPhysicalPositions[i]);
            columnNames[i] = String.valueOf(myPhysicalPositions[i - 1] + "-" + String.valueOf(myPhysicalPositions[i]));
            if (alignment == null) {
                for (int t = 0; t < numTaxa; t++) {
                    theData[t][i] = Double.NaN;
                }
            } else {
                for (int t = 0; t < numTaxa; t++) {
                    theData[t][i] = Double.valueOf(IBSDistanceMatrix.computeHetBitDistances(alignment, interestedTaxa, t)[0]);
                }
            }
        }

        TableReport result = new SimpleTableReport("Distance Matrix Ranges", columnNames, theData);

        return new DataSet(new Datum("MatrixRanges:" + input.getName(), result, "Distance Matrix Ranges"), this);

    }

    public void setPhysicalPositions(String[] positions) {
        int[] result = new int[positions.length];
        for (int i = 0; i < positions.length; i++) {
            result[i] = Integer.valueOf(positions[i]);
        }
        setPhysicalPositions(result);
    }

    public void setPhysicalPositions(int[] positions) {
        myPhysicalPositions = positions;
    }

    public int[] getPhysicalPositions() {
        return myPhysicalPositions;
    }

    public void setLocus(String locus) {
        myLocus = locus;
    }

    public String getLocus() {
        return myLocus;
    }

    public void setTaxon(String taxon) {
        myTaxon = taxon;
    }

    public String getTaxon() {
        return myTaxon;
    }

    /**
     * Icon for this plugin to be used in buttons, etc.
     *
     * @return ImageIcon
     */
    public ImageIcon getIcon() {
        return null;
    }

    /**
     * Button name for this plugin to be used in buttons, etc.
     *
     * @return String
     */
    public String getButtonName() {
        return "Distance Matrix";
    }

    /**
     * Tool Tip Text for this plugin
     *
     * @return String
     */
    public String getToolTipText() {
        return "Create a distance matrix";
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy