org.jax.bham.infer.PlotPhylogeneticTreeAction.java Source code

Java tutorial

Introduction

Here is the source code for org.jax.bham.infer.PlotPhylogeneticTreeAction.java

Source

/*
 * Copyright (c) 2010 The Jackson Laboratory
 * 
 * This is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this software.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.jax.bham.infer;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.util.List;
import java.util.Map;

import javax.swing.AbstractAction;

import org.jax.bham.BhamApplication;
import org.jax.haplotype.analysis.PhylogenyAssociationTest;
import org.jax.haplotype.analysis.visualization.PhylogenyTreeImageFactory;
import org.jax.haplotype.analysis.visualization.PhylogenyTreeImagePanel;
import org.jax.haplotype.analysis.visualization.SimplePhylogenyTreeImageFactory;
import org.jax.haplotype.analysis.visualization.SmoothPaintScale;
import org.jax.haplotype.phylogeny.data.PhylogenyTreeEdgeWithRealValue;
import org.jax.haplotype.phylogeny.data.PhylogenyTreeNode;
import org.jax.util.gui.desktoporganization.Desktop;
import org.jax.util.math.NegativeLog10;
import org.jfree.chart.renderer.PaintScale;

/**
 * A simple action for showing a phylogeny tree image
 * @author <A HREF="mailto:keith.sheppard@jax.org">Keith Sheppard</A>
 */
public class PlotPhylogeneticTreeAction extends AbstractAction {
    /**
     * every {@link java.io.Serializable} is supposed to have one of these
     */
    private static final long serialVersionUID = -1788988428667216529L;

    private final PhylogenyTreeNode phylogenyTree;

    private final PhylogenyAssociationTest test;

    /**
     * Constructor
     * @param phylogenyTree
     *          the tree that this action will plot
     * @param test
     *          the test 
     */
    public PlotPhylogeneticTreeAction(PhylogenyTreeNode phylogenyTree, PhylogenyAssociationTest test) {
        super("Plot Phylogenetic Tree");

        this.phylogenyTree = phylogenyTree;
        this.test = test;
    }

    /**
     * {@inheritDoc}
     */
    public void actionPerformed(ActionEvent e) {
        final PhylogenyTreeNode phylogenyTree;
        final PhylogenyTreeImageFactory treeImageFactory;
        if (this.test == null) {
            phylogenyTree = this.phylogenyTree;
            treeImageFactory = new SimplePhylogenyTreeImageFactory();
        } else {
            Map<String, List<Double>> phenoData = this.test.getPhenotypeDataSource().getPhenotypeData();
            phenoData.keySet().retainAll(this.test.getCommonStrains());

            PhylogenyTreeNode preTransformPhylogenyTree = this.test.getPhylogenyTester()
                    .testMultipleResponseSignificance(this.phylogenyTree, phenoData);

            // do a -log10 transform
            phylogenyTree = PhylogenyTreeEdgeWithRealValue.transform(preTransformPhylogenyTree,
                    new NegativeLog10());
            PhylogenyTreeEdgeWithRealValue maxEdge = PhylogenyTreeEdgeWithRealValue
                    .getEdgeWithMaximumValue(phylogenyTree);

            PaintScale paintScale = new SmoothPaintScale(0.0, maxEdge.getRealValue(), Color.BLUE, Color.RED);
            treeImageFactory = new SimplePhylogenyTreeImageFactory(paintScale);
        }

        PhylogenyTreeImagePanel phyloPanel = new PhylogenyTreeImagePanel(treeImageFactory, phylogenyTree);

        Desktop desktop = BhamApplication.getInstance().getBhamFrame().getDesktop();
        desktop.createInternalFrame(phyloPanel, "Phylogeny Tree Graph", null,
                "phylo tree graph: " + this.phylogenyTree.toNewickFormat());
    }
}