package statalign.postprocess.plugins;
import java.awt.BorderLayout;
import java.util.ArrayList;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import statalign.base.InputData;
import statalign.base.State;
import statalign.distance.Distance;
import statalign.postprocess.Postprocess;
import statalign.postprocess.gui.DistanceGUI;
public class VisualDistance extends statalign.postprocess.Postprocess {
public String title;
JPanel pan = new JPanel(new BorderLayout());
DistanceGUI gui;
PPFold ppFold;
ArrayList<String> initialAlignment;
ArrayList<String> currentAlignment;
public ArrayList<Double> distances;
double currentDistance = 1;
public VisualDistance() {
sampling = true;
screenable = true;
outputable = true;
// postprocessable = true;
// postprocessWrite = true;
rnaAssociated = true;
selected = false;
}
@Override
public String getTabName() {
// TODO Auto-generated method stub
return "Similarity";
}
@Override
public Icon getIcon() {
// TODO Auto-generated method stub
return new ImageIcon(ClassLoader.getSystemResource("icons/loglikelihood1.gif"));
}
@Override
public JPanel getJPanel() {
// TODO Auto-generated method stub
return pan;
}
@Override
public void reloadPanel() {
pan = new JPanel(new BorderLayout());
}
@Override
public String getTip() {
// TODO Auto-generated method stub
return "Plots similarity between the first alignment sample and consecutive alignment samples.";
}
@Override
public double getTabOrder() {
return 11.0d;
}
@Override
public String[] getDependencies() {
return new String[] { "statalign.postprocess.plugins.PPFold" };
}
@Override
public void refToDependencies(Postprocess[] plugins) {
ppFold = (PPFold)plugins[0];
}
@Override
public void setSampling(boolean enabled) {
sampling = enabled;
}
@Override
public void beforeFirstSample(InputData input) {
if(show) {
title = input.title;
pan.removeAll();
gui = new DistanceGUI(title, this);
JScrollPane scroll = new JScrollPane();
scroll.setViewportView(gui);
pan.add(scroll);
//System.out.println("Distance parent: " + pan.getParent());
if(pan.getParent() != null)
{
pan.getParent().getParent().getParent().validate();
}
}
distances = new ArrayList<Double>();
}
@Override
public void newSample(State state, int no, int total) {
if(sampling) {
//System.out.println("THESE ARE THE CURRENT ALIGNMENTS: " + ppFold.tempAlignment);}
//System.out.println(ppFold.al);
if(ppFold.alignments.size() == 0 || ppFold.tempAlignment == null) {return;}
//System.out.println("INITIAL ALIGNMENT: " + ppFold.al.sequences);
//System.out.println("TEMP ALIGNMENT: " + ppFold.tempAlignment);
currentDistance = Distance.AMA(ppFold.al.sequences, ppFold.tempAlignment);
if(no > 0)
{
System.out.println(currentDistance);
distances.add(currentDistance);
}
else
{
distances.add(new Double(1));
}
//currentDistance = Distance.sequenceSimilarityScore(ppFold.al.sequences);
if(show) {gui.repaint();}
}
}
@Override
public void afterLastSample() {
}
}