package beast.evolution.alignment;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import beast.core.BEASTObject;
import beast.core.Description;
@Description("For identifying a single taxon")
public class Taxon extends BEASTObject {
// we can use the ID to identify a taxon name/taxon label
// if there are multiple taxaset with the same taxa, use
// idref to refer to the single taxon.
// public Input<String> m_sLabel = new Input<>("label", "name of the taxon", Validate.REQUIRED);
public Taxon(final String id) {
setID(id);
initAndValidate();
}
public Taxon() {
}
@Override
public void initAndValidate() {
}
protected String toString(final String indent) {
return indent + getID() + "\n";
}
/**
* Convenience method to produce a list of taxon objects
* @param taxaNames a list of taxa names
* @return a list of Taxon objects with corresponding names
*/
public static List<Taxon> createTaxonList(final List<String> taxaNames) {
final List<Taxon> taxa = new ArrayList<>();
for (final String taxaName : taxaNames) {
taxa.add(new Taxon(taxaName));
}
return taxa;
}
// /**
// * Convenience method to produce a list of taxon objects sorted alphabetically
// * @param taxaNames a list of taxa names
// * @return a list of Taxon objects with corresponding names
// */
// @Deprecated
// public static List<Taxon> createSortedTaxonList(final List<String> taxaNames) {
// final List<Taxon> taxa = new ArrayList<>();
// for (final String taxaName : taxaNames) {
// taxa.add(new Taxon(taxaName));
// }
// Collections.sort(taxa, new Comparator<>() {
// @Override // assumes IDs are not null
// public int compare(Taxon o1, Taxon o2) {
// return o1.getID().compareTo(o2.getID());
// }
// });
// return taxa;
// }
/**
* @param taxa1 a collection of taxa name strings
* @param taxa2 a second collection of taxa name strings
* Throws a runtime exception if the two collections do not have the same taxa.
*/
public static void assertSameTaxa(String id1, Collection<String> taxa1, String id2, Collection<String> taxa2) {
if (taxa1.size() != taxa2.size()) {
throw new RuntimeException("Incompatible taxon sets in " + id1 + " and " + id2);
}
for (String taxon : taxa1) {
boolean found = false;
for (String taxon2 : taxa2) {
if (taxon.equals(taxon2)) {
found = true;
break;
}
}
if (!found) {
throw new RuntimeException("Taxon" + taxon + "is not in " + id2);
}
} }
}