package edu.byu.cs.roots.opg.chart.selectvertical;
import java.util.ArrayList;
import edu.byu.cs.roots.opg.model.Individual;
public class AncesTree {
public AncesBox ancesBox = null;
public ArrayList<ArrayList<AncesBox>> ancesGenPositions;
public AncesTree(Individual root)
{
ancesBox = new AncesBox(root);
ancesGenPositions = new ArrayList<ArrayList<AncesBox>>();
ancesBox.gen = 0;
ancesGenPositions.add(new ArrayList<AncesBox>());
ancesGenPositions.get(0).add(ancesBox);
ancesBox.numInGen = 0;
AncesBox.duplicateMap.put(ancesBox.indi.id,0); //add root to duplicate map
ancesBox.buildBoxTree(ancesGenPositions, 1);
}
public void DrawTree(ChartMargins chart, VerticalChartOptions options, double x, double y)
{
ancesBox.drawAncesRootTree(chart, options, ancesGenPositions, x, y);
}
public void setDuplicateNumbers()
{
for(int i=0; i < ancesGenPositions.size(); i++)
{
for(AncesBox ab : ancesGenPositions.get(i))
ab.setDuplicateIndex();
}
}
public int getLargestGen()
{
double max = 0;
int index = 0;
for(int i=0; i < ancesGenPositions.size(); i++)
{
double temp = ancesGenPositions.get(i).size();
if(max < temp )
{
max = temp;
index = i;
}
}
return index;
}
public int getGenAtMaxHieght(double maxheight, BoxFormat bf)
{
double temp;
double bh = bf.getMinHeight();
int i;
for(i=0; i < ancesGenPositions.size(); i++)
{
temp = ancesGenPositions.get(i).size()*bh;
if(maxheight < temp )
{
i--;
break;
}
}
return i;
}
public double getLargestGenHeight(BoxFormat bf)
{
int l = getLargestGen();
double mh = bf.getMinHeight();
return ancesGenPositions.get(l).size()*mh;
}
public int geGenerationSize(int gen)
{
return ancesGenPositions.get(gen).size();
}
public double getHeight()
{
return ancesBox.upperSubTreeHeight - ancesBox.lowerSubTreeHeight;
}
}